W ramce danych chciałbym uzyskać indeks kolumny według nazwy. Na przykład:
x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))
Chcę poznać indeks kolumny dla „paska”.
Wymyśliłem następujące, ale wydaje się to nieeleganckie. Czy brakuje mi prostszego wbudowanego interfejsu, którego mi brakuje?
seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
match("bar",names(x))
działa również, chociażmatch
jest znacznie bardziej użyteczny, gdy pierwszy argument jest również wektorem.Odpowiedzi:
prawdopodobnie jest to najprostszy sposób:
źródło
żeby dodać kolejną możliwość:
zwykle możesz użyć
grep
i jest to przyzwoite (tj. grepl, aby wykonywać tego rodzaju zadania w bardziej wyrafinowany sposób przy użyciu wyrażeń regularnych.Na twoim przykładzie możesz uzyskać indeks kolumny z:
grep("^bar$", colnames(x))
lubgrep("^bar$", names(x))
Znakami
^
i$
są odpowiednio meta znaki na początku i na końcu łańcucha.Sprawdź? Grep, a zwłaszcza? Regex, aby uzyskać więcej informacji (tzn. Możesz pobrać tylko częściowe nazwy / dopasowania, lub zwracaną wartością jest sam ciąg znaków lub wektor logiczny, ...)
Dla mnie
grep
jest bardziej R-ish.Silnie powiązany jest najnowszy pakiet Hadleya Wickhem: stringr , pakiet do „nowoczesnego, spójnego przetwarzania łańcucha”, w tym funkcje podobne do grep. Niedawno opublikował artykuł na ten temat w R Journal.
Zobacz także moją odpowiedź na temat nakładania stosu na identyczny problem.
źródło