考虑以下数据:
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