为什么这个 case_when 命令对所有情况都执行命令?

Why does this case_when command do the command for all cases?

第 1 列中的 4 表示表示“其他”的答案。第 2 列代表“其他”是什么。我希望第 1 列中没有答案 4 的所有内容在第 2 列中都有 NA。使用 case_when 不会给出我期望的结果。

我有这个数据

col1    col2
1       "a"
4       "c"
4       NA
3       NA

我运行:

df <- df %>%
  mutate(col2 = case_when(col1 != 4 ~ NA))

并期望:

col1    col2
1       NA
4       "c"
4       NA
3       NA

但我明白了

col1    col2
1       NA
4       NA
4       NA
3       NA

我做错了什么?

问题是您的 case_when 没有 col2 == 4 的案例。因此返回 NA。根据文档:

If no cases match, NA is returned.

要修复此问题,请通过 TRUE ~ col2 添加默认值到您的 case_when:

df <- data.frame(
  col1 = c(1, 4, 4, 3),
  col2 = c("a", "c", NA, NA)
)

library(dplyr)

df %>%
  mutate(col2 = case_when(
    col1 != 4 ~ NA_character_, 
    TRUE ~ col2))
#>   col1 col2
#> 1    1 <NA>
#> 2    4    c
#> 3    4 <NA>
#> 4    3 <NA>