【问题标题】:Case_when changing values I don't want to changeCase_when 改变值我不想改变
【发布时间】:2020-11-13 17:17:17
【问题描述】:

我正在使用 case_when 函数在 R 中重新编码一个变量,根据一组规则只更改一些值,但是当我打印新变量时,我没有包含在 case_when 函数中的值也会发生变化。

我要重新编码的变量是具有字符和数值的混合变量。我正在使用 case_when 函数将字符值转换为数字。情况是,当我打印新变量时(期望得到旧数值加上新数值),旧数值也发生了变化。

下面是我正在使用的代码..

pobgit_p %>% 
  mutate(P57_2_num = case_when(
    P57_2 == "No" ~ 0,
    P57_2 == "NS" ~ 0,
    P57_2 == "NC" ~ 0,
  ))

我不明白我做错了什么。

提前非常感谢:)

【问题讨论】:

  • 为了让我们帮助您,请提供reproducible example。例如,要生成最小数据集,您可以使用head()subset() 或索引。然后使用dput() 给我们一些可以立即放入R 的东西。另外,请确保您知道该怎么做when someone answers your question。更多信息可以在 Stack Overflow 的help center 上找到。谢谢!

标签: r case-when


【解决方案1】:

也许添加TRUE ~ as.numeric(P57_2_num) 会有所帮助?

请花点时间了解如何提供正确的reproducible example。这样做将有助于我们提供更准确地反映您的数据的解决方案。此外,更有经验的用户可能会发现您可能不知道的其他潜在问题。

library(tibble)
library(dplyr)

pobgit_p <- tibble(
  P57_2_num = c("No",
                "NS",
                "NC",
                10,
                20,
                100)
) 

pobgit_p %>% 
  mutate(P57_2_num = case_when(
      P57_2_num == "No" ~ 0,
      P57_2_num == "NS" ~ 0,
      P57_2_num == "NC" ~ 0,
      TRUE ~ as.numeric(P57_2_num)
  ))

输出:


# A tibble: 6 x 1
  P57_2_num
      <dbl>
1         0
2         0
3         0
4        10
5        20
6       100

reprex package (v0.3.0) 于 2020 年 11 月 13 日创建

原表:

# A tibble: 6 x 1
  P57_2_num
  <chr>    
1 No       
2 NS       
3 NC       
4 10       
5 20       
6 100 

【讨论】:

  • 非常感谢!抱歉,下次我会尝试用一个可重现的例子来分享我的疑问!
  • 不客气。请按箭头投票并将此解决方案标记为正确。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多