按多个逻辑条件删除行(rstudio)

按多个逻辑条件删除行(rstudio),r,if-statement,filter,R,If Statement,Filter,假设这是我的数据帧: df <- data.frame(replicate(10,sample(0:50,20,rep=TRUE))) S X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 1 3 26 39 25 24 4 46 42 8 42 2 40 6 50 50 22 2 40 24 26 17 3 32 45 18 7 19 6 33 12 0 13 4 3 45 43 32 16 33 25 18 35 45 5 7 36

假设这是我的数据帧:

df <- data.frame(replicate(10,sample(0:50,20,rep=TRUE)))

S  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1   3 26 39 25 24  4 46 42  8  42
2  40  6 50 50 22  2 40 24 26  17
3  32 45 18  7 19  6 33 12  0  13
4   3 45 43 32 16 33 25 18 35  45
5   7 36  2 25 16 20 24 14 27  29
6  45  4 12 13 50 35 38  1 27  34
7  18 43 38 16 34 18 19 45  4  34
8  18  9 33 38 18 13 23 44 41   4
9  28 34  6  3 14 11 47  4 21  50
10  6 48 42 46 48 42 12 33  1  32
11 28 20 37  2 26 33  5  2 22  27
12 40 30 41 45 28  6  5 46 21  46
13  1 47 46 37  0  3 11 45 12  11
14 20  0  9 38 42 15 44  1  2  45
15 49 29 25 41 38 26 20 34 50   0
16  2  5 47  6 36 34 28 36 32  38
17 15 22 50 13 26  9 37 40 41  23
18 44 27 47 37 26 34 31 36 44  12
19 47 41 19  2 50 44 48 36 34  38
20 25 31 28 34  8 19  3 13 14  23
set.seed(1111)
df <- data.frame(replicate(5,sample(0:50,5,rep=TRUE)))
df
  X1 X2 X3 X4 X5
1 23 49  0  8  8
2 21 44 38 46 21
3 46  5 38 28 42
4  6 27 32 45 50
5 37  7 44 39  3

df您可以尝试
子集
+
行和
如下

subset(df,!rowSums(df > 30)>=8)

来说明这个(以及)如何工作,考虑这个数据帧:

df <- data.frame(replicate(10,sample(0:50,20,rep=TRUE)))

S  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1   3 26 39 25 24  4 46 42  8  42
2  40  6 50 50 22  2 40 24 26  17
3  32 45 18  7 19  6 33 12  0  13
4   3 45 43 32 16 33 25 18 35  45
5   7 36  2 25 16 20 24 14 27  29
6  45  4 12 13 50 35 38  1 27  34
7  18 43 38 16 34 18 19 45  4  34
8  18  9 33 38 18 13 23 44 41   4
9  28 34  6  3 14 11 47  4 21  50
10  6 48 42 46 48 42 12 33  1  32
11 28 20 37  2 26 33  5  2 22  27
12 40 30 41 45 28  6  5 46 21  46
13  1 47 46 37  0  3 11 45 12  11
14 20  0  9 38 42 15 44  1  2  45
15 49 29 25 41 38 26 20 34 50   0
16  2  5 47  6 36 34 28 36 32  38
17 15 22 50 13 26  9 37 40 41  23
18 44 27 47 37 26 34 31 36 44  12
19 47 41 19  2 50 44 48 36 34  38
20 25 31 28 34  8 19  3 13 14  23
set.seed(1111)
df <- data.frame(replicate(5,sample(0:50,5,rep=TRUE)))
df
  X1 X2 X3 X4 X5
1 23 49  0  8  8
2 21 44 38 46 21
3 46  5 38 28 42
4  6 27 32 45 50
5 37  7 44 39  3

等等,第二行已经被删除。

你能解释一下为什么这可以解决问题吗?嗨!由于我的真实数据帧有几个名称不同的列,我选择了需要应用过滤器的列:a=8),我如何删除它们而不是保留它们呢?
subset(df,!rowsumes(df>30)>=8)
@ChrisRuehlemann很抱歉,我错过了
。我修好了,谢谢@AnabelaCantiani我之前的回答有一个输入错误,请检查我的更新。@AnabelaCantiani我不确定你是否要使用
子集(df[-c(29:32,51:54,73:76)],!rowSums(df[c(29:32,51:54,73:76)]>30>=8)
我想知道你为什么要接受
子集(df,rowSums(df>30)>=8)
“大于30的8倍或更多值(例如,受试者19)”而是排除所有其他行。要使该代码段排除有问题的行,需要更改:
subset(df,!rowSums(df>30)>=8)
。请查看我的答案,我已更新并提供了更多解释。