Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 当筛选不等于某个值时,筛选器将删除NAs_R_Dplyr - Fatal编程技术网

R 当筛选不等于某个值时,筛选器将删除NAs

R 当筛选不等于某个值时,筛选器将删除NAs,r,dplyr,R,Dplyr,这是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.

这是
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’

mydf它就在
?dplyr
的文档中(尽管它似乎只是添加到文档中):

使用filter()查找条件为真的行/案例。与基本子集不同,条件计算结果为NA的行将被删除

这与
base::subset()
的工作方式一致,但与
[
+逻辑索引的子集工作方式不一致

正如@akrun在评论中所说,您可以使用
filter(mydf,y!='a'| is.na(y))
来保存
na
值。如果能够使用
idential()
isTRUE()
,那就太好了,但它们不是矢量化的。您可以编写一个方便的包装器:

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

eq
filter
已经以这种方式使用了很长时间,您可能需要
filter(mydf,y!=“a”| is.na(y))
我刚刚用
r3..1.3
dplyr\u 0.4.3
进行了检查,它提供了与您的SOMG相同的输出-我不知道我在没有意识到这种行为的情况下在代码中引入了多少bug。