dplyr过滤器在未指定时去除NA[重复]。

问题描述 投票:0回答:1

考虑以下数据。

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

我想用下面的代码从上面的数据框中过滤出空白的数据。

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? 最好也能有个解释。谢谢你。

r dplyr na
1个回答
1
投票

这是默认的行为。R根本不知道 NA == ''TRUEFALSE

NA == ""
[1] NA 

因此,第三行不会被返回。NA 以及有几种工作方法。

df %>% filter(coalesce(col1, "x") != "")
df %>% filter(col1 != "" | is.na(col1)

我个人比较喜欢第一种方式 coalesce 替换 NA 的默认值(这里是 "x"),然后检查被替代的值是否等于 "".


0
投票

我不知道为什么会发生这种情况,这是不应该的,但你为什么不直接给NA的值赋值,删除空白,然后再给NA的值赋值呢?

© www.soinside.com 2019 - 2024. All rights reserved.