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
patrickmdnet
quelle
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")
kohske
quelle
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.

Henrik
quelle