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
match("bar",names(x))
funktioniert auch,match
ist aber viel nützlicher, wenn das erste Argument auch ein Vektor ist.Antworten:
wahrscheinlich ist dies der einfachste Weg:
quelle
Nur um eine weitere Möglichkeit hinzuzufügen:
Sie können
grep
diese 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))
odergrep("^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
grep
ist 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.
quelle