filter
中dplyr
的预期行为是什么?听起来很可怕。我错过了什么,或者版本错了吗?
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’
答案 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"))