HOWTO · R

Finde Index eines Elements in einem R-Vektor

Dieses Tutorial demonstriert, wie man den Index eines Elements in einem R-Vektor findet

Auf dieser Seite

Verwenden Sie which(), wenn Sie jede Position benötigen, an der eine Bedingung erfüllt ist. match() eignet sich, wenn Sie die erste Position jedes gesuchten Werts benötigen; für einen Wert ohne Treffer gibt die Funktion NA zurück. Die Positionen in R-Vektoren beginnen bei 1. Das folgende Beispiel verwendet denselben Vektor, um beide Ergebnisse zu vergleichen.

Alle passenden Positionen mit which() finden

which() nimmt einen logischen Vektor entgegen und gibt die Positionen seiner TRUE-Elemente zurück. Ein Vergleich eines Vektors mit einem einzelnen Wert kann mehrere Treffer liefern, wenn dieser Wert mehrfach vorkommt. Um nach mehreren möglichen Werten zu suchen, erstellen Sie mit %in% einen logischen Vektor, der die Zugehörigkeit angibt, und übergeben ihn anschließend an which().

Führen Sie dieses Beispiel aus, um zuerst alle Vorkommen von 20 und danach die Positionen mit dem Wert 10 oder 30 zu finden:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

x <- c(10, 20, 10, 30, 20)
which(x == 20)
which(x %in% c(10, 30))
[1] 2 5
[1] 1 3 4

Das erste Ergebnis enthält beide Positionen, an denen 20 vorkommt; das zweite listet die Positionen auf, deren Werte entweder 10 oder 30 sind. Wie bei allen Indizes in R beginnen diese Positionen bei 1. Die Code- und Ausgabebeispiele sind unverändert; ihre sichtbaren Beschriftungen bleiben auf Englisch.

%in% ist ein Operator, der für jedes Element des linken Vektors ein logisches Ergebnis liefert. Er ist kein Argument von which(). Sie können auch anhand einer Bedingung wie x > 15 suchen: Erstellen Sie diesen logischen Ausdruck oder übergeben Sie ihn direkt an which(), um die Positionen zu erhalten, an denen die Bedingung erfüllt ist. Da which() nur Positionen zurückgibt, die TRUE entsprechen, erscheinen fehlende logische Werte nicht im Ergebnis.

Für jeden Wert die erste passende Position mit match() finden

Mit match(gesuchte_werte, suchvektor) finden Sie für jeden Wert in gesuchte_werte die erste Position im suchvektor. Die Reihenfolge der Argumente ist wichtig: Übergeben Sie zuerst die gesuchten Werte und danach den Vektor, in dem gesucht wird. Wiederholte Werte im durchsuchten Vektor führen nicht zu wiederholten Positionen; für jeden gesuchten Wert gibt es höchstens ein Ergebnis. Ist ein gesuchter Wert nicht vorhanden, gibt match() standardmäßig NA zurück.

Mit dem Vektor x aus dem vorherigen Abschnitt findet dieser Ausdruck die erste Position von 20 und 30 und meldet für 40 keinen Treffer:

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

x <- c(10, 20, 10, 30, 20)
match(c(20, 30, 40), x)
[1]  2  4 NA

Die Ergebnisse entsprechen der Reihenfolge 20, 30 und 40: 20 kommt zuerst an Position 2 vor, 30 an Position 4. 40 ist nicht vorhanden, daher lautet das Ergebnis dafür NA. Die Code- und Ausgabebeispiele sind unverändert; ihre sichtbaren Beschriftungen bleiben auf Englisch.

Wählen Sie die Funktion danach aus, welches Ergebnis Sie benötigen: which(x == value) kann jede passende Position zurückgeben, während match(value, x) nur den ersten Treffer liefert. Für mehrere gesuchte Werte gibt which(x %in% values) die Positionen im durchsuchten Vektor zurück. match(values, x) liefert dagegen für jeden gesuchten Wert eine erste Trefferposition und behält dabei die Reihenfolge von values bei. Keine der beiden Funktionen verändert den Vektor. Wenn Sie die Positionen verwenden, um einen anderen Vektor auszuwählen, beachten Sie, dass ein erfolgloses match()-Ergebnis NA ist. Prüfen Sie mit !is.na(position), bevor Sie es verwenden, falls Werte ohne Treffer übersprungen werden sollen. Die zurückgegebenen Positionen beziehen sich auf den durchsuchten Vektor. Berücksichtigen Sie daher dessen Reihenfolge, wenn Sie die Positionen auf zugehörige Daten anwenden.