r、 不等于,不包括nas

r、 不等于,不包括nas,r,dplyr,R,Dplyr,我正在尝试筛选数据以忽略某些值。问题是我想包括NAs。当我使用不等于“!=”运算符时,NAs也会被删除 a= c("A","C","B",NA,"C","A",NA,"B","A") df = data.frame(a) df2 <- df %>% filter(a != "B") df2 a=c(“a”、“c”、“B”、NA、“c”、“a”、NA、“B”、“a”) df=数据帧(a) df2% 过滤器(a!=“B”) df2 例如

我正在尝试筛选数据以忽略某些值。问题是我想包括NAs。当我使用不等于“!=”运算符时,NAs也会被删除

    a= c("A","C","B",NA,"C","A",NA,"B","A")
    df = data.frame(a)

    df2 <- df %>%
       filter(a != "B")
    df2
a=c(“a”、“c”、“B”、NA、“c”、“a”、NA、“B”、“a”)
df=数据帧(a)
df2%
过滤器(a!=“B”)
df2

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

NA
永远不等于任何内容

NA == NA # NA, not TRUE
@bouncyball是推荐的解决方案,如果您想检查两个值或变量是否确实相同,可以使用
相同的

df %>% filter(!sapply(a, identical, "B"))
或使用库
purrr

df %>% filter(!map_lgl(a, identical, "B"))

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

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

#      a
# 1    A
# 2    C
# 3 <NA>
# 4    C
# 5    A
# 6 <NA>
# 7    A
df%>%
过滤器(a!=“B”|是.na(a))
#a
#1A
#2 C
# 3 
#4 C
#5 A
# 6 
#7 A

逻辑计算将
NA
视为缺少的“真/假值…”


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

Thank you@bouncyball-是否因为NAs在R中被视为特殊值而被忽略,并且在使用时总是注册为false!=?使用
时,它们始终被视为
NA
=。您可以自己测试,例如,
1!=NA
或查看
?NA
上的帮助。谢谢@Gregor。这是有道理的。那个!=仅保留“TRUE”值,但NAs显示为NA并将被删除。@BounchBall-如果您想将您的评论作为答案,我会选择它作为正确答案。谢谢
NA
可能被解释为类似,其中
NA
意味着实际值可能是任何东西,但由于潜在的问题(例如,
因子
级别不足,缺少集合成员资格)而不清楚。用这个
c(“A”,NA,“B”)
可以表示“任何字母”。使用
a!=“B”
给出一个逻辑的
NA
,因为
a
NA
,它可能是
“B”
(意思是
)或其他东西(意思是
)。也许我想得太多了,但对我来说,
NA
意味着“可能是任何合法的价值观”。谢谢你提供这些额外的信息。bouncyball的解决方案最适合当前的需要,但这将在将来非常有用。