Subsetting a dataframe using %in% and ! in R



我有以下数据框架。

Test_Data <- data.frame(x = c("a", "b", "c"), y = c("d", "e", "f"), z = c("g", "h", "i"))

x y z
1 a d g
2 b e h
3 c f i

我想根据多个条件过滤它。具体来说,我想删除任何值为"b"的记录。列x或"f"我的子集结果将是;

x y z
1 a d g

我尝试了以下解决方案;

View(Test_Data %>% subset(!x %in% "b" | !y %in% "f"))
View(Test_Data %>% subset(!x %in% "b" & !y %in% "f"))
View(Test_Data %>% subset(!(x %in% "b" | y %in% "f")))

最后两个解决方案给了我想要的结果,但是第一个是唯一一个对我来说"有意义"的,因为它使用了OR操作符,我只需要满足其中一个条件。为什么最后一个解决方案有效,而第一个却不行?

子集操作返回您想要保留的行。

但是你的规则集定义了你想要NOT TO KEEP的行。因此,你会对否定逻辑感到困惑。

您不想保留的行遵循一系列规则:r1 | r2 | ....否定是:!(r1 | r2 |…)或:!r1 &r2 !,…

最新更新