假设我有一个包含100多列的数据集,并且我只需要保留数据中满足一个条件的行,这些行应用于所有100列。我该怎么办?
假设,如下所示......我只需要保留Col1或2或3或4中的任何一个> 0的行
Col1 Col2 Col3 Col4
1 1 3 4
0 0 4 2
4 3 4 3
2 1 0 2
1 2 0 3
0 0 0 0
在上面的示例中,除了最后一行之外,所有行都将成为它。我需要将结果放在与原始行相同的数据帧中。不确定我是否可以使用lapply循环遍历> 0或我可以使用子集的列..任何帮助表示赞赏
我可以使用列索引并执行df<-subset(df,c(2:100)>0)
。这不能给我正确的结果。
答案 0 :(得分:11)
假设您的data.frame为DF
,那么使用[
将为您完成工作。
> DF[DF[,1]>0 | DF[,2] >0 | DF[,3] >0 | DF[,4] >0, ]
Col1 Col2 Col3 Col4
1 1 1 3 4
2 0 0 4 2
3 4 3 4 3
4 2 1 0 2
5 1 2 0 3
如果您有数百个列,则可以使用此替代方法
> DF[rowSums(DF)=!0, ]
Col1 Col2 Col3 Col4
1 1 1 3 4
2 0 0 4 2
3 4 3 4 3
4 2 1 0 2
5 1 2 0 3
答案 1 :(得分:2)
dat <- read.table(header = TRUE, text = "
Col1 Col2 Col3 Col4
1 1 3 4
0 0 4 2
4 3 4 3
2 1 0 2
1 2 0 3
0 0 0 0
")
您可以使用data.table自动容纳data.frame碰巧拥有的许多列。这是一种方法,但有一种更优雅的方法可以使用data.table:
require(data.table)
dt <- data.table(dat)
dt[rowSums(dt>0)>0]
# Col1 Col2 Col3 Col4
# 1: 1 1 3 4
# 2: 0 0 4 2
# 3: 4 3 4 3
# 4: 2 1 0 2
# 5: 1 2 0 3