使用dplyr :: filter()删除NA观察值

时间:2015-03-04 14:59:11

标签: r dplyr tidyr tidyverse

我的数据如下:

library(tidyverse)

df <- tribble(
    ~a, ~b, ~c,
    1, 2, 3, 
    1, NA, 3, 
    NA, 2, 3
)

我可以使用NA删除所有drop_na()观察结果:

df %>% drop_na()

或删除单个列中的所有NA个观察结果(例如a):

df %>% drop_na(a)

为什么我不能使用常规!=过滤器管道?

df %>% filter(a != NA)

为什么我们必须使用tidyr的特殊功能去除NA?

3 个答案:

答案 0 :(得分:21)

来自@Ben Bolker:

  

[T]他与dplyr :: filter()

没有任何关系

来自@Marat Talipov:

  

[A]与NA的比较,包括NA == NA,将返回NA

来自related answer @farnsy:

  

==运算符不会像您期望的那样处理NA。

     

将NA视为含义&#34;我不知道那里有什么&#34;。正确答案   至3> NA显然是NA,因为我们不知道是否缺失值   是否大于3。嗯,NA == NA也一样。他们是   两个缺失值但真实值可能完全不同,所以   正确的答案是&#34;我不知道。&#34;

     

R不知道你在分析中做了什么,所以不是   可能会引入以后最终发布的错误   令你尴尬的是,它不允许比较运营商思考NA   是一个价值。

答案 1 :(得分:20)

例如:

你可以使用:

df %>% filter(!is.na(a))

删除a列中的NA。

答案 2 :(得分:12)

如果某人于2020年在这里,在制作完所有管道之后,如果u管道%>% na.exclude将带走管道中的所有NA!