Znajdowanie indeksu kolumny według jego nazwy w R [zamknięte]

11

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
patrickmdnet
źródło
3
match("bar",names(x))działa również, chociaż matchjest znacznie bardziej użyteczny, gdy pierwszy argument jest również wektorem.
kardynał
Czy rzeczywiście potrzebujesz indeksu kolumny? Możesz także użyć x [, „bar”], aby uzyskać całą kolumnę, podobnie jak zwykły pasek x $ . W obu przypadkach subskrybuj wiersze: x [2: 3, „bar”] lub x $ bar [2: 3]. Jeśli potrzebujesz wprowadzić indeks do procedury, która wymaga indeksu, to oczywiście nie jest pomocne.
Wayne,
Bah, ciągle psuje moje znaki dolara. Najważniejsze jest to, że istnieją dwa sposoby użycia nazwy kolumny jako metody znaku dolara i włączenia jej jako indeksu dolnego.
Wayne
3
To pytanie wydaje się być nie na temat, ponieważ dotyczy sposobu zrobienia czegoś w języku R, a nie jakichkolwiek powiązanych problemów statystycznych.
gung - Przywróć Monikę

Odpowiedzi:

22

prawdopodobnie jest to najprostszy sposób:

which(names(x)=="bar")
kohske
źródło
11

żeby dodać kolejną możliwość:
zwykle możesz użyć grepi 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)) lub grep("^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 grepjest 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.

Henrik
źródło