r - 检查 R 中的 NA 的两列之间不等式的有效方法?
问题描述
当我过滤以检查两列之间的不等式时,我需要明确说明数据中的 NA,因为过滤器会保留条件评估为 TRUE 的行,而 NA 会破坏该评估。这就是我的意思:
获取以下数据:
df <- data.frame(x = c(1:4,NA,6:10), y = c(1,2,NA,3,6,NA,7,8,9,11))
df
x y
1 1 1
2 2 2
3 3 NA
4 4 3
5 NA 6
6 6 NA
7 7 7
8 8 8
9 9 9
10 10 11
当我想知道哪些行不相等时,以下代码不会削减它:
library(dplyr)
df %>% filter(x != y)
x y
1 4 3
2 10 11
相反,我需要明确说明 NA:
df %>% filter(x != y | (is.na(x) & !is.na(y)) | (!is.na(x) & is.na(y)))
x y
1 3 NA
2 4 3
3 NA 6
4 6 NA
5 10 11
...但这太冗长了。我尝试了其他方法,例如基本子集和subset
,但这种不便仍然存在。
那么,是否有更直接的方法来检查 NA 的不平等性?
解决方案
首先格式化它们:
df %>% filter(format(x) != format(y))
给予:
x y
1 3 NA
2 4 3
3 NA 6
4 6 NA
5 10 11