[英]Removing NA observations with dplyr::filter()
我的数据如下所示:
library(tidyverse)
df <- tribble(
~a, ~b, ~c,
1, 2, 3,
1, NA, 3,
NA, 2, 3
)
我可以使用drop_na()
删除所有NA
观察:
df %>% drop_na()
或删除所有NA
观测在单个列( a
为例):
df %>% drop_na(a)
为什么我不能只使用普通的!=
过滤器管道?
df %>% filter(a != NA)
为什么我们必须使用 tidyr 的特殊函数来删除 NAs?
例如:
您可以使用:
df %>% filter(!is.na(a))
删除 a 列中的 NA。
来自@Ben Bolker:
[T]他与 dplyr::filter() 没有特别的关系
来自@Marat Talipov:
[A]任何与NA的比较,包括NA==NA,都会返回NA
来自@farnsy 的相关回答:
== 运算符不会像您期望的那样处理 NA。
将 NA 视为“我不知道那里有什么”的意思。 3 > NA 的正确答案显然是 NA,因为我们不知道缺失值是否大于 3。 嗯,对于 NA == NA 也是一样。 它们都是缺失值,但真实值可能大不相同,因此正确答案是“我不知道”。
R 不知道您在分析中正在做什么,因此与其潜在地引入后来最终会发布让您尴尬的错误,不如让比较运算符认为 NA 是一个值。
如果 2020 年有人在这里,在制作完所有管道后,如果 u pipe %>% na.exclude
将带走管道中的所有 NA!
我总是使用它,它运行良好
cool$day[cool$day==''] <- NA
cool$day[is.na(cool$day)] <- "NA"
酷 <- 酷[!cool$day == "NA", ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.