11 votos

Encontrar el índice de columna por su nombre en R

En un marco de datos, me gustaría conseguir la columna del índice por nombre. Por ejemplo:

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

Quiero saber el índice de columna para el "bar".

Se me ocurrió la siguiente, pero parece poco elegante. Hay una manera más sencilla builtin que me estoy perdiendo?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2

22voto

scottm Puntos 159

probablemente esta es la forma más sencilla:

which(names(x)=="bar")

12voto

Anthony Cramp Puntos 126

sólo para agregar otra posibilidad:
Generalmente, usted puede usar grep y la de los descendientes (es decir, grepl, para hacer este tipo de trabajos en una más sophisiticated forma, el uso de expresiones regulares.

En el ejemplo, podría obtener el índice de columna con:

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

El ^ y $ son de meta caracteres para el comienzo y final de una cadena, respectivamente.

Cheque ?grep y especialmente ?regex para más información (es decir, se puede tomar sólo parcial de los nombres o partidos, o el valor de retorno es la propia cadena o una lógica de vectores,...)

Para mí, grep es más R-ish.

Fuertemente relacionado es el reciente paquete de Hadley Wickhem: stringr, Un paquete para el "moderno, consistente cadena de procesamiento", incluyendo grep como funciones. Recientemente publicó un artículo sobre él en el I Diario.

Véase también mi respuesta en stackoverflow en un idéntico problema.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X