dplyr过滤器删除不等于值的NAs?

时间:2017-11-07 17:04:54

标签: r dplyr

filterdplyr的预期行为是什么?听起来很可怕。我错过了什么,或者版本错了吗?

mydf <- data.frame(x = 1:5, y = c(letters[1:3], rep(NA, 2)))
mydf
  x    y
1 1    a
2 2    b
3 3    c
4 4 <NA>
5 5 <NA>

filter(mydf, y != 'a')
  x y
1 2 b
2 3 c

packageVersion('dplyr')
[1] ‘0.7.2’

1 个答案:

答案 0 :(得分:3)

它就在?dplyr的文档中(虽然它似乎只添加到文档9 months ago中):

  

使用filter()查找条件为真的行/个案。与基本子集不同,条件评估为NA的行将被删除。

这与base::subset()的工作方式一致,但如何使用[ +逻辑索引进行子集化。

正如@akrun在评论中所说,您可以使用filter(mydf, y != 'a' |is.na(y))来保留NA值。能够使用identical()isTRUE()会很好,但这些都不是矢量化的。你可以写一个方便的包装器:

eq <- function(x,c) {x==c | is.na(x)}
filter(mydf,eq(y,"a"))