由于我有一个多年的样本,我试图在我的数据框架中突变一列工资,以便根据通货膨胀进行调整,这一列称为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)})
我们可以使用 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'上进行多次转换,最好做一次,然后用它来进行进一步的转换计算。