首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当未指定dplyr过滤器时移除NA。

当未指定dplyr过滤器时移除NA。
EN

Stack Overflow用户
提问于 2020-05-28 16:27:39
回答 2查看 938关注 0票数 1

考虑以下数据:

代码语言:javascript
复制
library(tidyverse)
df <- tibble(col1 = c("A", "", NA),
             col2 = 5:7)
#> # A tibble: 3 x 2
#>   col1   col2
#>   <chr> <int>
#> 1 "A"       5
#> 2 ""        6
#> 3  NA       7

我试图用下面的代码从上面的数据帧中筛选出空白

代码语言:javascript
复制
df %>% filter(col1 != "")
#> # A tibble: 1 x 2
#>   col1   col2
#>   <chr> <int>
#> 1 A         5

为什么除空白之外还删除NA?我在筛选器调用中没有包括df %>% filter(!is.na(col1))drop_na()na.exclude()等等,因此我认为不应该将NA行从数据帧中筛选出来。

如何过滤掉空白,但保留NA?也希望有一种解释。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-28 16:37:56

这是默认行为:r根本不知道NA == ''TRUE还是FALSE

代码语言:javascript
复制
NA == ""
[1] NA 

因此,第三行不返回。如果您也想包括NA,那么有几个工作回合:

代码语言:javascript
复制
df %>% filter(coalesce(col1, "x") != "")
df %>% filter(col1 != "" | is.na(col1)

就我个人而言,我更喜欢第一种方法:coalesce用默认值(这里是"x")替换NA,然后检查替代值是否等于""

票数 1
EN

Stack Overflow用户

发布于 2020-05-28 16:31:03

我不知道为什么会发生这种情况,但你为什么不直接把一个值放进NA's,去掉空格,然后再把这些值放进NA's

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62069747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档