为什么这个 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>
第 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>