【问题标题】:in R does NA == NA?在 R 中是否 NA == NA?
【发布时间】:2018-11-19 17:05:30
【问题描述】:

identical(NA, NA) 返回TRUE,但以下代码将NA 过滤出日期范围:

library(tidyverse)
filter(starwars, birth_year == birth_year)

如果NA 等于NA,则上面的starwars 过滤数据框应包含NA 的出生年份。为什么不呢?

【问题讨论】:

  • 为什么要NA == NA?如果缺少两个值,那么您就没有理由说它们相同,也没有理由说它们不同。因此NA == NA 本身就是NA

标签: r na


【解决方案1】:

NA 是 identical 到 NA,但不等于它。如果您运行NA==NA,则响应将为 NA,因为等号运算符不适用于 NA。来自identical 文档:

调用 same 是在 if 和 while 中测试完全相等的方法 语句,以及使用 && 或 || 的逻辑表达式。在 您需要确保获得所有这些应用程序 逻辑值。

用户经常使用比较运算符,例如 == 或 !=,在这些 情况。看起来很自然,但不是这些运算符 设计为在 R 中执行。它们返回一个像参数一样的对象。如果你 期望 x 和 y 的长度为 1,但碰巧其中一个 不是,你不会得到一个 FALSE。同样,如果其中之一 参数为 NA,结果也为 NA。在任何一种情况下,表达式 if(x == y).... 不会按预期工作。

来自==的文档:

缺失值 (NA) 和 NaN 值甚至被视为不可比较 对他们自己,所以涉及他们的比较总是会导致 NA。 比较字符串时也会导致缺失值 一个在当前排序规则语言环境中无效。

基本原理是,在概念层面上,缺失值彼此不同。它们可能代表非常不同的值,但我们只是不知道这些值是什么。

在这种情况下,另一种方法是添加| is.na(birth_year)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 2015-07-04
    • 2015-11-19
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多