2012-09-11 5 views
6

Let decir que tengo la siguiente trama de datos en I:Cómo quitar la columna trama de datos con un solo valor

df1 <- data.frame(Item_Name = c("test1","test2","test3"), D_1=c(1,0,1), 
        D_2=c(1,1,1), D_3=c(11,3,1)) 

me gustaría crear una función que eliminar columnas sin variación (por ejemplo, en este caso, eliminaría la columna D_2 porque tiene solo 1 valor)

Sé que podría verificarlo a mano, pero en realidad mis datos son muy grandes y me gustaría automatizarlos. ¿Alguna idea?

Respuesta

9

Filter es una función útil aquí. Filtraré solo aquellos en los que hay más de 1 valor único.

decir

Filter(function(x)(length(unique(x))>1), df1) 

## Item_Name D_1 D_3 
## 1  test1 1 11 
## 2  test2 0 3 
## 3  test3 1 1 
8

Usted puede hacer:

df1[c(TRUE, lapply(df1[-1], var, na.rm = TRUE) != 0)] 
# Item_Name D_1 D_3 
# 1  test1 1 11 
# 2  test2 0 3 
# 3  test3 1 1 

donde la pieza lapply le indica qué variables tienen algunas variaciones:

lapply(df1[-1], var, na.rm = TRUE) != 0 
# D_1 D_2 D_3 
# TRUE FALSE TRUE 
Cuestiones relacionadas