You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么R中is.na()和!=比较运算对NA值的筛选结果不一致

结果差异的根本原因

R 语言中NA代表缺失值,所有直接和NA进行的比较运算(==、!=、>、<等)返回结果都是NA,而非TRUE或FALSE,case_when对返回NA的条件会判定为不匹配,自动跳过该条规则,继续向下匹配后续条件。

两段代码的执行逻辑差异

  1. 生成df13的代码中,第二个判断条件为Test %in% c("NA") & TYN!="Yes":
    你的df12中TYN列全为NA,因此TYN!="Yes"的返回结果全为NA,整个条件判断结果为NA,会被case_when跳过,最终匹配到最后一条规则Test %in% c("Fail", "NA")~"Fail",所以Rel列对应值为Fail。
  2. 生成df14的代码中,第二个判断条件为Test %in% c("NA") & is.na(TYN):
    is.na()是专门用来检测缺失值的函数,对NA会返回TRUE,整个条件判断成立,因此返回你预期的"NA"。

关于TYN为NA时是否属于TYN!="Yes"的疑问

答案是不属于,你可以直接在R控制台执行NA != "Yes",返回结果为NA,既不是TRUE也不是FALSE,无法触发&连接的条件判断。

如果需要让TYN为NA的场景也被不等于Yes的条件覆盖,可以把条件修改为以下两种写法之一:

# 写法1:显式加is.na判断
Test %in% c("NA") & (TYN != "Yes" | is.na(TYN)) ~ "NA"

# 写法2:用%in%取反,简化判断
Test %in% c("NA") & !TYN %in% "Yes" ~ "NA"

内容的提问来源于stack exchange,提问作者Stataq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:27:03