使用 R 过滤特殊行

Using R to filter special rows

我有一个问题困扰了我很久time.I有一个数据框如下...

ll <- data.frame(id=1:10,
                 A=c(rep(0,5),3,4,5,0,2),
                 B=c(1,4,2,0,3,0,3,24,0,0),
                 C=c(0,3,4,5,0,4,0,6,0,5),
                 D=c(0,1,2,0,42,4,0,3,8,0))

> ll
   id A  B C  D
1   1 0  1 0  0
2   2 0  4 3  1
3   3 0  2 4  2
4   4 0  0 5  0
5   5 0  3 0 42
6   6 3  0 4  4
7   7 4  3 0  0
8   8 5 24 6  3
9   9 0  0 0  8
10 10 2  0 5  0

我想过滤掉一些有多个“0”的特殊行,例如...

    id A  B C  D
1   1  0  1 0  0

我希望最终输出为...

   id A  B C  D
2   2 0  4 3  1
3   3 0  2 4  2
6   6 3  0 4  4
8   8 5 24 6  3

您可以只使用 rowSums:

> ll[rowSums(ll == 0) <= 1, ]
  id A  B C D
2  2 0  4 3 1
3  3 0  2 4 2
6  6 3  0 4 4
8  8 5 24 6 3

如果有任何不应包含的列,您可以在 rowSums 步骤中删除它们。例如,我假设 "id" 不会被包括在内。如果是这样的话,那么你可以这样做:

ll[rowSums(ll[-1] == 0) <= 1, ]