如何解决过滤器的否定在 R
[数据集]
X | Y | 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 | Y | 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 | Y | Z |
---|---|---|
5.12 | 5.14 | 3.16 |
5.09 | 5.12 | 3.18 |
但是我收到了整个数据集
你能告诉我我犯了什么错误吗?
解决方法
我认为这可能是逻辑问题而不是 R 问题。如果您用 or
替换您的 and
语句,那么我认为您将获得预期的结果以及对原始语句的否定。换句话说,d %>% filter(x!=0 & y!=0 & z!=0 & !is.na(x) & !is.na(y) & !is.na(z))
。
要反转条件,您可以在原始条件中添加 !
。
library(dplyr)
d %>% filter(!(x==0 | y==0 | z==0 | is.na(x) | is.na(y) | is.na(z)))
# x y z
#1 5.12 5.14 3.16
#2 5.09 5.12 3.18
数据
d <- structure(list(x = c(4.98,5.28,5.12,5.09,0),y = c(NA,NA,5.14,z = c(NA,3.21,3.16,3.18,7.12,NA)),row.names = c(NA,-6L),class = "data.frame")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。