2012-09-11 10 views
6

Lassen Sie sagen, ich habe folgende Datenrahmen in R entfernen:Wie Datenrahmen Spalte mit einem einzigen Wert

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)) 

Ich möchte eine Funktion erstellen, die Spalten ohne Varianz (zB in dieser löschen würde Fall, würde es Spalte D_2 entfernen, weil es nur 1 Wert hat)

Ich weiß, dass ich es von Hand überprüfen konnte, aber in Wirklichkeit meine Daten sind sehr groß, und ich möchte es automatisieren. Irgendeine Idee?

Antwort

9

Filter ist eine nützliche Funktion hier. Ich werde nur für diejenigen filtern, bei denen es mehr als 1 eindeutigen Wert gibt.

heißt

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

Sie tun können:

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 

wo das lapply Stück sagt Ihnen, welche Variablen haben einige Varianz:

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