【问题标题】:Mutate character column to adjust values for inflation with else if statement in R使用 R 中的 else if 语句改变字符列以调整通货膨胀值
【发布时间】:2020-04-25 19:19:28
【问题描述】:

由于我有一个名为 adj_SALARY 的多年样本,因此我正在尝试更改数据框中的薪金列以调整通货膨胀。工资列是一个字符向量(由 unadj_SALARY 表示),我需要将这些值乘以消费者价格指数的比率(如下所示作为分数)以将所有值转换为 2017 美元。我也有列作为虚拟变量,指示 YEAR_2014、YEAR_2015、YEAR_2016、YEAR_2017 和 YEAR_2018。我尝试运行下面的代码,但仍然遇到错误消息“在 if (YEAR_2014 == 1) { : 条件的长度 > 1,并且只会使用第一个元素”。希望获得一些关于设置它的最佳方法的帮助!这是我现在的代码:

enter code here NHIS_test <- NHIS1 %>% 
   mutate(adj_SALARY = if(YEAR_2014 == 1) {
as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/230.280) }
else if(YEAR_2015 == 1) { 
  as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/233.916) }
else if (YEAR_2016 == 1) {
  as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/233.707) }
else if (YEAR_2017 == 1) {
  as.numeric(as.character(NHIS1$unadj_SALARY))*(242.839/236.916)}
else if (YEAR_2018 == 1) { 
  as.numeric(as.character(NHIS1$unadj_SALARY))*(1)})

【问题讨论】:

    标签: r if-statement numeric dplyr


    【解决方案1】:

    我们可以使用ifelse/case_when 代替if/else ifelse 是矢量化的

    library(dplyr)
    NH1S1 %>%
         mutate(unadj_SALARY = as.numeric(as.character(unadj_SALARY)),
                adj_SALARY = 
                 case_when(
                    YEAR_2014 == 1 ~  unadj_SALARY *(242.839/230.280),
                          YEAR_2015 == 1 ~  unadj_SALARY *(242.839/233.916),
                          YEAR_2016 == 1 ~ unadj_SALARY *(242.839/233.707),
                          YEAR_2017 == 1 ~ unadj_SALARY *(242.839/236.916),
                          YEAR_2018 == 1 ~ unadj_SALARY))
    

    注意:与其对“unadj_SALARY”进行多次numeric 转换,不如先进行一次,然后将其用于进一步的转换/计算

    【讨论】:

    • 知道了!非常感谢。
    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多