我的数据如下所示:
library(tidyverse)
df <- tribble(
~a, ~b, ~c,
1, 2, 3,
1, NA, 3,
NA, 2, 3
)
我可以使用drop_na()
删除所有NA
观察结果
df %>% drop_na()
或者删除单个列(例如a
)中的所有NA
观察值:
df %>% drop_na(a)
为什么我不能只使用普通的!=
过滤器管道?
df %>% filter(a != NA)
为什么我们必须使用tidyr中的特殊函数来删除NAs?
发布于 2015-03-04 23:34:00
来自@Ben Bolker:
这与dplyr::filter()没有特别的关系
来自@Marat Talipov:
与NA的任何比较,包括NA==NA,都将返回NA
来自@farnsy的related answer:
==操作符并不像您期望的那样对待NA。
把NA想象成“我不知道那里有什么”的意思。3> NA的正确答案显然是NA,因为我们不知道缺失值是否大于3。嗯,对于NA == NA也是一样的。它们都是缺失值,但真值可能完全不同,所以正确的答案是“我不知道”。
R不知道您在分析中做了什么,所以它不允许比较运算符认为NA是一个值,而不是潜在地引入bug,这些bug最终会让您感到尴尬。
发布于 2017-08-09 04:54:46
例如:
您可以使用:
df %>% filter(!is.na(a))
删除a栏中的NA。
发布于 2020-04-14 03:54:33
如果有人在2020年在这里,在制作完所有的管道后,如果你管道%>% na.exclude
将会移除管道中的所有NAs!
https://stackoverflow.com/questions/28857653
复制相似问题