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
match("bar",names(x))
também funciona, emboramatch
seja muito mais útil quando o primeiro argumento também é um vetor.Respostas:
provavelmente esta é a maneira mais simples:
fonte
apenas para adicionar outra possibilidade:
você geralmente pode usar
grep
e 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))
ougrep("^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.
fonte