r语言 - dplyr滤波器在未指定时删除NA



考虑以下数据:

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根本不知道NA == ''TRUE还是FALSE

NA == ""
[1] NA 

因此,不会返回第三行。 如果您还想包括NA,则有几个工作循环:

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

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

我不知道为什么会这样,它不应该,但是你为什么不直接为 NA 断言一个值,删除空格,然后再次将这些值断言为 NA

最新更新