首页 > 解决方案 > Case_when 改变值我不想改变

问题描述

我正在使用 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,
  ))

我不明白我做错了什么。

提前谢谢了 :)

标签: rcase-when

解决方案


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

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

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 包于 2020 年 11 月 13 日创建(v0.3.0)

原表:

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

推荐阅读