首页 > 解决方案 > 过滤器的否定在R中没有按预期工作

问题描述

【数据集】

X Z
4.98 不适用 不适用
5.28 不适用 3.21
5.12 5.14 3.16
5.09 5.12 3.18
0 0 7.12
0 0 不适用
d %>% filter(x==0 | y==0 | z==0 | is.na(x) | is.na(y) | is.na(z))

上面的 R 代码给了我正确的结果,它归档数据集并在 x、y 或 z 中的任何一个中显示 0 或 NA 的所有内容,如下所示

X Z
4.98 不适用 不适用
5.28 不适用 3.21
0 0 7.12
0 0 不适用

但是当我将条件反转为否定时,它显示了一切。

d %>% filter(x!=0 | y!=0 | z!=0 | !is.na(x) | !is.na(y) | !is.na(z))

预期的结果是

X Z
5.12 5.14 3.16
5.09 5.12 3.18

但我收到了整个数据集

你能告诉我我犯了什么错误吗?

标签: rfilternegation

解决方案


我认为这可能是一个逻辑问题,而不是 R 问题。如果您将您的or陈述替换为andthen 我认为您将获得预期的结果和对原始陈述的否定。换句话说,d %>% filter(x!=0 & y!=0 & z!=0 & !is.na(x) & !is.na(y) & !is.na(z)).


推荐阅读