Encontrar el índice de la columna por su nombre en R [cerrado]

11

En un marco de datos, me gustaría obtener el índice de la columna 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 "barra".

Se me ocurrió lo siguiente, pero parece poco elegante. ¿Hay una construcción más sencilla que me estoy perdiendo?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
patrickmdnet
fuente
3
match("bar",names(x))También funciona, aunque matches mucho más útil cuando el primer argumento es también un vector.
cardenal
¿Realmente necesitas el índice de la columna? También puede usar x [, "bar"] para obtener la columna completa, similar a la habitual x $ bar. Y en ambos casos, subíndice las filas: x [2: 3, "bar"] o x $ bar [2: 3]. Si necesita alimentar el índice a una rutina que requiere un índice, eso no es útil, por supuesto.
Wayne
Bah, sigue arruinando mis signos de dólar. La conclusión es que hay dos formas de usar el nombre de una columna del método del signo de dólar e incluirlo como un subíndice.
Wayne
3
Esta pregunta parece estar fuera de tema porque se trata de cómo hacer algo en R y no de ningún problema estadístico relacionado.
gung - Restablece a Monica

Respuestas:

22

Probablemente esta sea la forma más simple:

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

solo para agregar otra posibilidad: por
lo general, puede usar grepy son descendientes (es decir, grepl, hacer este tipo de trabajos de una manera más sofisticada usando expresiones regulares).

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

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

Los ^y $son metacaracteres para el principio y el final de una cadena, respectivamente.

Compruebe? Grep y especialmente? Regex para obtener más información (es decir, solo puede obtener nombres / coincidencias parciales, o el valor de retorno es la cadena en sí o un vector lógico, ...)

Para mí, grepes más R-ish.

Muy relacionado está el paquete reciente de Hadley Wickhem: stringr , un paquete para "procesamiento de cadenas moderno y consistente" que incluye funciones grep. Recientemente publicó un artículo al respecto en el R Journal.

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

Henrik
fuente