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, aunquematch
es 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
grep
y 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í,
grep
es 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