如果单元格包含大于x的值,则删除R中的行

时间:2015-04-03 08:25:41

标签: r

我想在任意列的单元格中删除包含大于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), ]的行。

1 个答案:

答案 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