identical(NA, NA)返回TRUE,但以下代码过滤NA掉日期框架:
library(tidyverse)
filter(starwars, birth_year == birth_year)
Run Code Online (Sandbox Code Playgroud)
如果NA不相等NA的星火过滤的数据帧以上应该包括出生年NA.为什么不呢?
NA是identicalNA,但不等于它.如果运行NA==NA,响应将为NA,因为等于运算符不适用于NA.从identical文档:
对相同的调用是在if和while语句以及使用&&或||的逻辑表达式中测试精确相等的方法.在所有这些应用程序中,您需要确保获得单个逻辑值.
在这些情况下,用户经常使用比较运算符,例如==或!=.它看起来很自然,但它不是这些运算符在R中设计的.它们返回一个像参数一样的对象.如果你期望x和y的长度为1,但碰巧其中一个不是,你将不会得到一个FALSE.同样,如果其中一个参数是NA,则结果也是NA.在任何一种情况下,表达式if(x == y)....都不会按预期工作.
并从以下文档==:
缺失值(NA)和NaN值甚至被认为是不可比较的,因此涉及它们的比较将总是导致NA.比较字符串并且在当前排序规则区域设置中无效时,也会导致缺少值.
理由是,在概念层面上,缺失值彼此不同.它们可能代表非常不同的值,但我们只是不知道这些值是什么.
在这种情况下的另一种选择是添加| is.na(birth_year).
| 归档时间: |
|
| 查看次数: |
1364 次 |
| 最近记录: |