如何有条件地从R数据帧中删除列

时间:2013-09-11 20:14:38

标签: r dataframe

根据值的总和有条件地删除数据框列的有效方法是什么?

例如,在以下数据框中,我想删除值总和为零的所有列。

df = data.frame(Dum1=c(0,0,0,1,0,0,0,0,0,0),
Dum2=c(0,0,0,0,0,0,0,0,0,0),
Dum3=c(0,0,0,1,0,1,0,0,0,0),
Dum4=c(0,0,0,0,0,0,0,0,0,0))

colSums(as.matrix(df))

Dum1 Dum2 Dum3 Dum4 
1    0    2    0 

Dum2和Dum4都是零,所以我想放弃它们。不幸的是,在我的应用程序中,我将提前知道哪些列总和为零,或者我可以使用以下内容删除它们:

df$Dum2 <- NULL
df$Dum4 <- NULL

str(df)

'data.frame':   10 obs. of  2 variables:
 $ Dum1: num  0 0 0 1 0 0 0 0 0 0
 $ Dum3: num  0 0 0 1 0 0 0 0 0 0

非常感谢任何帮助

2 个答案:

答案 0 :(得分:3)

df0 <- df[, colSums(df) != 0]

答案 1 :(得分:2)

df[,which(colSums(df) == 0)] <- list(NULL)