我正在尝试过滤我的数据以忽略某些值。问题是我想包括 NA。当我使用不等于、“!=”运算符时,NA 也会被删除。
a= c("A","C","B",NA,"C","A",NA,"B","A")
df = data.frame(a)
df2 <- df %>%
filter(a != "B")
df2
Run Code Online (Sandbox Code Playgroud)
例如,我希望 df2 包含不等于 B(A 和 C)和 NA 的所有内容,而不是仅包含 A 和 C。
我们可以在函数中包含另一个条件filter来保留这些NA值:
df %>%
filter(a != "B" | is.na(a))
# a
# 1 A
# 2 C
# 3 <NA>
# 4 C
# 5 A
# 6 <NA>
# 7 A
Run Code Online (Sandbox Code Playgroud)
从?NA
逻辑计算将
NA其视为缺失的“TRUE/FALSE”值...
解释还有更多内容,但您可以查阅帮助文件。
NA永远不等于任何东西。
NA == NA # NA, not TRUE
Run Code Online (Sandbox Code Playgroud)
@bouncyball's 将是推荐的解决方案,如果您想检查两个值或变量是否确实相同,您可以使用identical:
df %>% filter(!sapply(a, identical, "B"))
Run Code Online (Sandbox Code Playgroud)
或使用库purrr
df %>% filter(!map_lgl(a, identical, "B"))
Run Code Online (Sandbox Code Playgroud)