r,不相等,不包括nas

时间:2017-10-16 15:25:02

标签: 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

例如,我希望df2包含不等于B(A和C)和NA的所有内容,而不仅仅包括A和C.

2 个答案:

答案 0 :(得分:2)

我们可以在filter函数中包含另一个条件,该条件将保留NA值:

df %>%
   filter(a != "B" | is.na(a))

#      a
# 1    A
# 2    C
# 3 <NA>
# 4    C
# 5    A
# 6 <NA>
# 7    A

来自?NA

  

逻辑计算将NA视为缺少的“TRUE / FALSE值...

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

答案 1 :(得分:0)

NA绝不等同于任何事情。

NA == NA # NA, not TRUE

@ bouncyball's是推荐的解决方案,如果你想检查两个值或变量是否真的相同,你可以使用identical

df %>% filter(sapply(a,function(x){!identical(x,"B")}))

使用库purrr

稍微不那么难看
df %>% filter(map_lgl(a,~ !identical(.x,"B")))