我的数据如下所示:
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中的一个特殊函数来删除NA?
5条答案
按热度按时间d7v8vwbk1#
例如:
您可以用途:
以除去a列中的NA。
cnwbcb6i2#
如果有人在2020年在这里,在制作完所有的管道后,如果u管道
%>% na.exclude
将带走管道中所有的NA!avkwfej43#
来自@Ben Bolker:
[T] this与dplyr::filter()没有特别的关系
来自@马拉特Talipov:
[A]ny与NA比较,包括NA==NA,将返回NA
来自@farnsy的related answer:
==运算符并不像您期望的那样处理NA。
NA的意思是“我不知道那里有什么”。3〉NA的正确答案显然是NA,因为我们不知道缺失值是否大于3。好吧,NA == NA也是一样的。它们都是缺失值,但真实值可能会有很大的不同,所以正确答案是“我不知道”。
R不知道你在分析中做了什么,所以它不允许比较运算符认为NA是一个值,而不是潜在地引入bug,这些bug最终会让你尴尬地发布。
mzillmmw4#
我总是用这个,它工作得很完美
nfeuvbwi5#
另一种选择是在
filter
中使用complete.cases
,例如删除A列中的NA。下面是一些可重复的代码:创建于2023-03-26带有reprex v2.0.2