Suchen des Spaltenindex anhand seines Namens in R [geschlossen]


10

In einem Datenrahmen möchte ich den Index der Spalte nach Namen abrufen. Zum Beispiel:

x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))

Ich möchte den Spaltenindex für "bar" kennen.

Ich habe mir Folgendes ausgedacht, aber es scheint unelegant. Gibt es eine einfachere Version, die mir fehlt?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2

2
match("bar",names(x))funktioniert auch, matchist aber viel nützlicher, wenn das erste Argument auch ein Vektor ist.
— Kardinal

Benötigen Sie tatsächlich den Spaltenindex? Sie können auch x [, "bar"] verwenden, um die gesamte Spalte abzurufen, ähnlich dem üblichen x $ bar. In beiden Fällen werden die Zeilen tiefgestellt: x [2: 3, "bar"] oder x $ bar [2: 3]. Wenn Sie den Index einer Routine zuführen müssen, für die ein Index erforderlich ist, ist dies natürlich nicht hilfreich.
— Wayne

Bah, es bringt meine Dollarzeichen immer wieder durcheinander. Unter dem Strich gibt es zwei Möglichkeiten, den Namen einer Spalte als Dollarzeichenmethode zu verwenden und als Index einzuschließen.
— Wayne

3
Diese Frage scheint nicht zum Thema zu gehören, da es darum geht, wie etwas in R zu tun ist, und nicht um verwandte statistische Probleme.
— Gung - Reinstate Monica

Antworten:


20

wahrscheinlich ist dies der einfachste Weg:

which(names(x)=="bar")

10

Nur um eine weitere Möglichkeit hinzuzufügen:
Sie können grepdiese Art von Jobs normalerweise verwenden (dh grepl), um diese Art von Jobs mithilfe regulärer Ausdrücke differenzierter zu erledigen.

In Ihrem Beispiel könnten Sie den Spaltenindex erhalten mit:

grep("^bar$", colnames(x)) oder grep("^bar$", names(x))

Die ^und $sind Metazeichen für den Anfang bzw. das Ende einer Zeichenfolge.

Überprüfen Sie? Grep und insbesondere? Regex auf weitere Informationen (dh Sie können nur teilweise Namen / Übereinstimmungen abrufen, oder der Rückgabewert ist die Zeichenfolge selbst oder ein logischer Vektor, ...)

Für mich grepist mehr R-ish.

Stark verwandt ist das aktuelle Paket von Hadley Wickhem: stringr , Ein Paket für "moderne, konsistente String-Verarbeitung" mit grep-ähnlichen Funktionen. Kürzlich veröffentlichte er einen Artikel darüber im R Journal.

Siehe auch meine Antwort zum Stackoverflow zu einem identischen Problem.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.