2012-02-14 13 views

Respuesta

71
which(colnames(df)=="b") 

Debería hacerlo.

53

Un método rápido y limpio es:

> match("b",names(df)) 
[1] 2 

que evita el vector de escán que == y which lo hacen. Si tiene muchas columnas, y lo hace mucho, puede que le guste el fastmatch package.

> require(fastmatch) 
> fmatch("b",names(df)) 
[1] 2 

fmatch es más rápido que match, pero en llamadas posteriores no es sólo más rápido, es instantánea.

+1

Si Estoy usando solo una variable (una columna), "coincidencia" y "que" ambos funcionan igual de bien para mí. Sin embargo, si estoy usando más de una variable, "que" arroja errores, mientras que "coincidencia" no me da errores. Entonces, para mi situación, "coincidencia" es una elección superior. ¡Gracias! –

9

Otro método que generaliza mejor a las tareas que coinciden no exactos es utilizar grep:

grep("^b$", colnames(df)) 

Si desea la cantidad de todos los nombres de las columnas que comienzan con "b" para ser eliminado, se escribiría :

df[ , - grep("^b", colnames(df))] 

Eso aclara cuidadosamente el problema de que no se puede usar la indexación negativa con vectores de caracteres.

7

..especially, si usted necesita para obtener varios índices de la columna de la aproximación por debajo aplica:

> df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100)) 
> which(names(df)%in%c("b", "c")) 
[1] 2 3 

si utiliza esto para subconjuntos de df no es necesario, que()

> 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 
Cuestiones relacionadas