Localizando o índice da coluna pelo nome em R [fechado]

11

Em um quadro de dados, gostaria de obter o índice da coluna por nome. Por exemplo:

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

Quero conhecer o índice da coluna para "bar".

Eu vim com o seguinte, mas parece deselegante. Existe uma construção mais direta que estou perdendo?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
patrickmdnet
fonte
3
match("bar",names(x))também funciona, embora matchseja muito mais útil quando o primeiro argumento também é um vetor.
cardeal
Você realmente precisa do índice da coluna? Você também pode usar x [, "bar"] para obter a coluna inteira, semelhante ao habitual x $ bar. E nos dois casos, inscreva as linhas: x [2: 3, "bar"] ou x $ bar [2: 3]. Se você precisar alimentar o índice com uma rotina que exija um índice, isso não é útil, é claro.
25711 Wayne
Bah, ele continua bagunçando meus cifrões. A conclusão é que existem duas maneiras de usar o nome de uma coluna, o método do cifrão e incluí-lo como um subscrito.
26411 Wayne
3
Esta questão parece estar fora do tópico, porque é sobre como fazer algo em R, e não sobre questões estatísticas relacionadas.
gung - Restabelece Monica

Respostas:

22

provavelmente esta é a maneira mais simples:

which(names(x)=="bar")
kohske
fonte
11

apenas para adicionar outra possibilidade:
você geralmente pode usar grepe seus falecidos (por exemplo, grepl, realizar esse tipo de trabalho de maneira mais sofisticada, usando expressões regulares.

No seu exemplo, você pode obter o índice da coluna com:

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

o ^ e $são meta caracteres para o início e o fim de uma sequência, respectivamente.

Verifique? Grep e especialmente? Regex para obter mais informações (por exemplo, você pode obter apenas nomes / correspondências parciais, ou o valor de retorno é a própria string ou um vetor lógico, ...)

Para mim, grep é mais R-ish.

Fortemente relacionado é o pacote recente de Hadley Wickhem: stringr , Um pacote para "processamento de string consistente e moderno", incluindo funções do tipo grep. Ele publicou recentemente um artigo sobre isso no R Journal.

Veja também minha resposta sobre stackoverflow em um problema idêntico.

Henrik
fonte