检查两列之间不平等的有效方法,说明 R 中的 NAs?

Efficient way to check for inequality between two columns accounting for NAs in R?

当我过滤以检查两列之间的不平等时,我需要明确说明数据中的 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 的不平等性?

使用 base R 你可以这样做:

df[(df$x!=df$y | is.na(df$x!=df$y)),]
#        x  y
#    3   3 NA
#    4   4  3
#    5  NA  6
#    6   6 NA
#    10 10 11

有必要使用 is.na()

显式包含产生 NA 的比较

先格式化它们:

df %>% filter(format(x) != format(y))

给予:

   x  y
1  3 NA
2  4  3
3 NA  6
4  6 NA
5 10 11