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

发布于 2025-01-11 11:49:14 字数 501 浏览 1 评论 0原文

第 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

我做错了什么?

4 in column 1 represents an answer that means "other". Column 2 represents what that "other" is. I want everything that doesn't have answer 4 in column 1 to have NA in column 2. Using case_when does not give the result I expect.

I have this data

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

I run:

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

And expect:

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

But I get

col1    col2
1       NA
4       NA
4       NA
3       NA

What did I do wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瑶笙 2025-01-18 11:49:14

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

如果没有匹配的案例,则返回 NA。

要解决此问题,请通过 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>

The issue is that your case_when has no case for col2 == 4. Therefore NA is returned. According to the docs:

If no cases match, NA is returned.

To fix that add a default value via TRUE ~ col2 to your 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>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文