R语言:使用filter函数多条件筛选移除指定行的正确方法
问题解决:正确移除指定条件的行
你原来的语句出错的原因很明确:df %>% filter(x != 1 & y != 7)的逻辑是同时满足x不等于1,且y不等于7的行才会被保留。这会把x=1但y为6、8的行也过滤掉——因为x=1不满足x !=1,所以这些行被错误排除,自然得不到你想要的结果。
正确的思路是保留所有不满足x == 1 & y == 7的行,有两种简洁的实现方式:
写法一:直接对目标条件取反
library(dplyr) df = data.frame(x=c(1,1,1,2,2), y=c(6,7,8,6,6)) df %>% filter(!(x == 1 & y == 7))
写法二:用德摩根定律转换条件
根据逻辑运算的德摩根定律,!(A & B)等价于!A | !B,也就是把“x不等于1”和“y不等于7”用或(|)连接:
df %>% filter(x != 1 | y != 7)
运行以上任意一种代码,都会得到你期望的结果:
x y 1 1 6 2 1 8 3 2 6 4 2 6
内容的提问来源于stack exchange,提问作者Nicolas
相关产品推荐
相关产品推荐

