在R语言中如何比较NA与NA并返回TRUE或FALSE?
R语言中让NA与NA比较返回指定结果的方法
针对你需要的NA与NA比较逻辑(NA==NA返回TRUE,NA>=NA返回TRUE,NA>NA返回FALSE,单NA时仍返回NA),可以通过以下几种方式实现:
1. 基础R向量化写法
直接组合条件判断,无需额外函数:
相等比较(==)
a = c(1,2,3,NA) b = c(1,2,NA,NA) (a == b) | (is.na(a) & is.na(b)) # 输出:TRUE TRUE NA TRUE
大于等于比较(>=)
(a >= b) | (is.na(a) & is.na(b)) # 输出:TRUE TRUE NA TRUE
大于比较(>)
需要区分三种场景:两者都是NA返回FALSE,仅一方是NA返回NA,否则正常比较:
# 用基础R实现 ifelse(is.na(a) & is.na(b), FALSE, ifelse(xor(is.na(a), is.na(b)), NA, a > b)) # 输出:FALSE FALSE NA FALSE
2. 借助dplyr简化逻辑
如果使用dplyr包,case_when可以让逻辑更清晰:
library(dplyr) # 大于比较的清晰写法 case_when( is.na(a) & is.na(b) ~ FALSE, is.na(a) | is.na(b) ~ NA, TRUE ~ a > b ) # 输出:FALSE FALSE NA FALSE
3. 相等比较的快捷工具
dplyr的near函数默认将NA与NA视为相等,还能处理浮点数精度问题:
near(a, b) # 输出:TRUE TRUE NA TRUE
内容的提问来源于stack exchange,提问作者WCMC
相关产品推荐
相关产品推荐

