studio - Obtenga el número de columna en R dado el nombre de la columna
matrices en r studio (4)
Posible duplicado:
Obtener el índice de columna de la etiqueta en un marco de datos
Necesito obtener el número de columna de una columna dado su nombre.
Supongamos que tenemos el siguiente marco de datos:
df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
Necesito una función que funcione de la siguiente manera:
getColumnNumber(df,"b")
Y volvería
[1] 2
¿Hay una función como esa?
¡Gracias!
..especialmente, si necesita obtener varios índices de columnas, se aplica el siguiente enfoque:
> df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
> which(names(df)%in%c("b", "c"))
[1] 2 3
si usa esto para subconjunto de df, no necesita qué ()
> df_sub <- df[, names(df)%in%c("b", "c")]
> head(df_sub)
b c
1 0.1712754 0.3119079
2 -1.3656995 0.7111664
3 -0.2176488 0.7714348
4 -0.6599826 -0.3528118
5 0.4510227 -1.6438053
6 0.2451216 2.5305453
Otro método que generaliza mejor las tareas de coincidencia no exactas es usar grep
:
grep("^b$", colnames(df) )
Si desea eliminar el número de todos los nombres de columna que comienzan con "b", debe escribir:
df[ , - grep("^b", colnames(df) )]
Esto perfecciona el problema de que no se puede usar la indexación negativa con vectores de caracteres.
Un método rápido y ordenado es:
> match("b",names(df))
[1] 2
Eso evita el escaneo vectorial que ==
y which
hace. Si tiene muchas columnas, y lo hace mucho, es posible que le guste el paquete fastmatch .
> require(fastmatch)
> fmatch("b",names(df))
[1] 2
fmatch
es más rápido que el match
, pero en llamadas posteriores no es solo más rápido, es instantáneo.
which( colnames(df)=="b" )
Deberías hacerlo.