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

eme*_*hex 24 r dplyr tidyr tidyverse

我的数据如下:

library(tidyverse)

df <- tribble(
    ~a, ~b, ~c,
    1, 2, 3, 
    1, NA, 3, 
    NA, 2, 3
)
Run Code Online (Sandbox Code Playgroud)

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

df %>% drop_na()
Run Code Online (Sandbox Code Playgroud)

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

df %>% drop_na(a)
Run Code Online (Sandbox Code Playgroud)

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

df %>% filter(a != NA)
Run Code Online (Sandbox Code Playgroud)

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

sha*_*cke 30

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

  • 我 2021 年来到这里,非常感谢您的建议! (4认同)

Jef*_*eng 25

例如:

您可以使用:

df %>% filter(!is.na(a))
Run Code Online (Sandbox Code Playgroud)

删除列a中的NA.

  • 这确实回答了标题问题:如何使用dplyr :: filter()删除na观察值。 (2认同)

eme*_*hex 23

来自@Ben Bolker:

[T]他与dplyr :: filter()没有任何关系

来自@Marat Talipov:

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

来自@farnsy 的相关答案:

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

把NA想象成"我不知道那里有什么".3> NA的正确答案显然是NA,因为我们不知道缺失值是否大于3.嗯,NA == NA也一样.它们都是缺失的值,但真正的价值可能会大不相同,所以正确答案是"我不知道".

R不知道你在分析中做了什么,所以不是可能引入后来最终被发布的错误让你感到尴尬,它不允许比较运算符认为NA是一个值.