r, 不等于, nas 不包括在内

Tes*_*tat 6 r dplyr

我正在尝试过滤我的数据以忽略某些值。问题是我想包括 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。

bou*_*all 7

我们可以在函数中包含另一个条件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”值...

解释还有更多内容,但您可以查阅帮助文件。


Moo*_*per 5

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)