R:通过两列使用“过滤”;“不平等”;运算符dplyr/子集
这个问题以前肯定有人回答过,但我在任何地方都找不到。我需要使用两列中的值来过滤/子集数据帧,以删除它们。在示例中,我希望保留所有不等于(!=)的行,以复制“1”和处理“a”。但是,子集和过滤器函数都会删除所有复制1和所有处理a。我可以通过使用which然后索引来解决它,但这不是使用管道操作符的最佳方法。你知道为什么过滤器/子集不过滤只有当这两个条件都是真的吗R:通过两列使用“过滤”;“不平等”;运算符dplyr/子集,r,dplyr,R,Dplyr,这个问题以前肯定有人回答过,但我在任何地方都找不到。我需要使用两列中的值来过滤/子集数据帧,以删除它们。在示例中,我希望保留所有不等于(!=)的行,以复制“1”和处理“a”。但是,子集和过滤器函数都会删除所有复制1和所有处理a。我可以通过使用which然后索引来解决它,但这不是使用管道操作符的最佳方法。你知道为什么过滤器/子集不过滤只有当这两个条件都是真的吗 require(dplyr) #Create example dataframe replicate = rep(c(1:3), tim
require(dplyr)
#Create example dataframe
replicate = rep(c(1:3), times = 4)
treatment = rep(c("a","b"), each = 6)
df = data.frame(replicate, treatment)
#filtering data
> filter(df, replicate!=1, treatment!="a")
replicate treatment
1 2 b
2 3 b
3 2 b
4 3 b
> subset(df, (replicate!=1 & treatment!="a"))
replicate treatment
8 2 b
9 3 b
11 2 b
12 3 b
#solution by which - indexing
index = which(df$replicate==1 & df$treatment=="a")
> df[-index,]
replicate treatment
2 2 a
3 3 a
5 2 a
6 3 a
7 1 b
8 2 b
9 3 b
10 1 b
11 2 b
12 3 b
我想你想在这里使用“或”条件。这看起来怎么样:
require(dplyr)
#Create example dataframe
replicate = rep(c(1:3), times = 4)
treatment = rep(c("a","b"), each = 6)
df = data.frame(replicate, treatment)
df %>%
filter(replicate != 1 | treatment != "a")
replicate treatment
1 2 a
2 3 a
3 2 a
4 3 a
5 1 b
6 2 b
7 3 b
8 1 b
9 2 b
10 3 b
用户或
|
而不是&
。默认情况下,过滤条件与和组合<代码>过滤器(df,replicate!=1 | treatment!=“a”)
它就像一个符咒。我很困惑,因为我理解&
运算符仅当两个条件都为真时才给出真值,而|运算符仅当一个条件为真或两个条件都为真时才给出真值,这对于哪个
函数是真的。这很奇怪,就像子集
和过滤器
中的情况一样。无论如何,非常感谢你,我的朋友!:)它就像一个符咒。我很困惑,因为我理解&
运算符仅当两个条件都为真时才给出真值,而|运算符仅当一个条件为真或两个条件都为真时才给出真值,这对于哪个
函数是真的。这很奇怪,就像子集
和过滤器
中的情况一样。无论如何,非常感谢你,我的朋友!:)没问题!在大多数情况下,您都是正确的,但是当您指定“not”例如“!=”时,您可能希望使用“或”而不是“and”。此外,如果您觉得您的问题已得到回答,请继续并点击复选标记以关闭它。