vacio studio seleccionar matrices listas filas eliminar datos crear contar columnas r

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.