按多个逻辑条件删除行(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)
。请查看我的答案,我已更新并提供了更多解释。