考虑以下数据。
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的值赋值呢?