首页 > 解决方案 > 检查 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 的不平等性?

标签: rfilterinequality

解决方案


首先格式化它们:

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

给予:

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

推荐阅读