r语言 - 过滤器/子集空单元格 " " 与 NA。为什么子集(df,x ==)不是子集(df,x !=)的对立面。dplyr 或底座中的错误?



考虑一个要过滤的简单数据框:

df <- data.frame(x = c('', '', NA, NA ))

> df
x
1     
2     
3 <NA>
4 <NA>

正如预期的那样,subset(df, x =='')结果是:

x
1  
2  

然而,令我非常惊讶的是subset(df, x !='')结果是:

[1] x
<0 rows> (or 0-length row.names)

谁能解释为什么''在与==一起使用时排除NA,但在与!=一起使用时包括NA。除了 R 基本函数中的错误之外,这还能是什么吗?这同样适用于dplyrfilter()

library(dplyr)
df%>%filter(x !='')
df%>%filter(x =='')

我们可以将条件与is.na

subset(df, is.na(x) | x != "")

因为==!=返回NA任何NA元素(即与NA返回NA的任何比较)都存在,而不是逻辑向量。subsetfilter删除这些NA行,如文档所示?subset

子集 - 指示要保留的元素或行的逻辑表达式:缺失值被视为假

并在?filter

请注意,当条件的计算结果为 NA 时,该行将被删除,这与带有 [

.

with(df,  x != "")
#[1] FALSE FALSE    NA    NA
with(df, is.na(x) | x != "")
#[1] FALSE FALSE  TRUE  TRUE

相关内容

  • 没有找到相关文章

最新更新