Изменить символ столбца, чтобы скорректировать значения для инфляции с помощью оператора if в R - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь изменить столбец для зарплаты в моем фрейме данных, чтобы скорректировать инфляцию, так как у меня есть многолетняя выборка, называемая adj_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)})

1 Ответ

1 голос
/ 25 апреля 2020

Мы можем использовать 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' несколько раз, лучше сделать это один раз, а затем использовать это для дальнейшего преобразования / расчетов

...