6

假设我有一个包含 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). 这并没有给我正确的结果。

4

2 回答 2

10

假设您的 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
于 2013-09-03T10:15:50.047 回答
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
于 2013-09-03T12:00:41.547 回答