我想在任意列的单元格中删除包含大于7
的值的所有行,无论是跨所有列还是跨特定列。
a <- c(3,6,99,7,8,9)
b <- c(99,6,3,4,5,6)
c <- c(2,5,6,7,8,3)
df <- data.frame (a,b,c)
a b c
1 3 99 2
2 6 6 5
3 99 3 6
4 7 4 7
5 8 5 8
6 9 6 3
V1: 我想删除包含大于7的值的所有行,而不管列是什么。
# result V1
a b c
2 6 6 5
4 7 4 7
V2: 我想删除列b和c
中包含大于7的值的所有行# result V2
a b c
2 6 6 5
3 99 3 6
4 7 4 7
6 9 6 3
SOF上有很多类似的问题,但我找不到解决这个问题的方法。到目前为止,我只能使用7
找到包含res <- df[rowSums(df != 7) < ncol(df), ]
的行。
答案 0 :(得分:8)
rowSums
的 df > 7
给出了&#39; TRUE&#39;的数字。每行。我们得到了&#39; 0&#39; 0如果没有&#39; TRUE&#39;对于那一行。通过否定结果,&#39; 0&#39; 0将更改为&#39; TRUE&#34;,并且所有其他值不等于0将为FALSE。这可以用于子集化。
df[!rowSums(df >7),]
# a b c
#2 6 6 5
#4 7 4 7
对于&#39; V2&#39;,我们使用相同的原则,除了我们在'df&#39;的子集上获得逻辑矩阵。即。只选择第二和第三列。
df[!rowSums(df[-1] >7),]
# a b c
#2 6 6 5
#3 99 3 6
#4 7 4 7
#6 9 6 3