使用 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/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
转换,不如执行一次,然后将其用于进一步的 transformation/calculations
我正在尝试更改数据框中的薪水列以针对 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/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
转换,不如执行一次,然后将其用于进一步的 transformation/calculations