我的数据如下:
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?
答案 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!