使用 R 中的 else if 语句改变字符列以调整 inflation 的值

Mutate character column to adjust values for inflation with else if statement in R

我正在尝试更改数据框中的薪水列以针对 inflation 进行调整,因为我有一个名为 adj_SALARY 的多年样本。 salary 列是一个字符向量(由 unadj_SALARY 表示),我需要将这些值乘以消费者价格指数的比率(下面显示为分数)以将所有值转换为 2017 年美元。我还有列作为虚拟变量,指示 YEAR_2014、YEAR_2015、YEAR_2016、YEAR_2017 和 YEAR_2018。我已经尝试 运行 下面的代码,但仍然遇到错误消息“In 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)})

我们可以使用ifelse/case_when代替if/elseifelse被向量化

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 转换,不如执行一次,然后将其用于进一步的 transformation/calculations