在R中,NA == NA吗?

时间:2018-11-19 17:05:31

标签: r na

identical(NA, NA)返回TRUE,但是以下代码过滤了日期框架中的NA

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

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

1 个答案:

答案 0 :(得分:5)

NA为NA的identical,但不相等。如果运行NA==NA,则响应将为NA,因为equal运算符不适用于NA。从identical文档中:

  

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

     

用户经常在其中使用比较运算符,例如==或!=   情况。看起来很自然,但这不是这些运算符   设计为在R中执行。它们返回的对象类似于参数。如果你   预期x和y的长度为1,但是碰巧其中之一   否则,您将不会获得单个FALSE。同样,如果   参数是NA,结果也是NA。无论哪种情况,表达式   if(x == y)....将无法正常工作。

还有==的文档中的信息:

  

缺失值(NA)和NaN值被认为是不可比的   对他们自己,因此涉及它们的比较将始终导致NA。   比较字符串和   一个在当前的整理语言环境中无效。

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

在这种情况下,可以选择添加| is.na(birth_year)