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

match("bar",names(x))También funciona, aunquematches mucho más útil cuando el primer argumento es también un vector.Respuestas:
Probablemente esta sea la forma más simple:
fuente
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))ogrep("^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.
fuente