在R中使用 else if 语句突变字符列,以调整通货膨胀值。

问题描述 投票:0回答:1

由于我有一个多年的样本,我试图在我的数据框架中突变一列工资,以便根据通货膨胀进行调整,这一列称为adj_SALARY,我的数据是一个字符向量(用unadj_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 mutate
1个回答
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))

注意:不需要进行 numeric 在'unadj_SALARY'上进行多次转换,最好做一次,然后用它来进行进一步的转换计算。

© www.soinside.com 2019 - 2024. All rights reserved.