Создание новой переменной гонки из существующего столбца в фрейме данных в R (с функцией case_when) - PullRequest
1 голос
/ 25 апреля 2020

Я работаю с данными Национального опроса о состоянии здоровья и пытаюсь упростить переменную расы до 5 сегментов. Я хочу создать новый столбец под названием «RACE» из существующих данных, который включает в себя азиатский = 1, черный = 2, белый (неиспанец c) = 3, испанец = 4, другой = 5. В настоящее время переменная расы называется «RACEA» и включает в себя несколько кодов, обозначающих расу, как написано здесь:

411, 412, 416, 434= Asian 200=Black 100=White 310,580,600=Other

НО, переменная, указывающая этническую принадлежность испанского c, является отдельной переменной под названием HISPETH. С этой переменной

10=non-Hispanic 20,23,30,40,50,61,62,63,70=Hispanic

Поэтому, чтобы создать значение белого (не Hispani c) и Hispani c, мне нужно R, чтобы использовать оба значения столбца RACEA и ХИСПЕТ.

Вот код, который я попытался выполнить, чтобы сделать все это, но меня встретило сообщение об ошибке, что «чем больше длина объекта не кратна короткой длине объекта» для части с список значений HISPETH, как показано ниже.

Что мне делать? Я открыт для использования других функций, кроме case_when, это то, что я использовал в прошлом. Спасибо!

`NHIS_test <- NHIS1 %>% 
      mutate(RACE = case_when(RACEA <= 411 ~ '1', 
                              RACEA <= 412 ~ '1', 
                              RACEA <= 416 ~ '1', 
                              RACEA <= 434 ~ '1', 
                              RACEA <= 200 ~ '2',
                              RACEA <= 100 & HISPETH <= 10 ~ '3',
                              HISPETH <= c(20:70) ~ '4', 
                              RACEA<=100 & HISPETH <= c(20,23,30,40,50,61,62,63,70) ~ '4', 
                              RACEA <= 310 ~ '5', 
                              RACEA <= 580 ~ '5',
                              RACEA <= 600 ~ '5',
                              TRUE ~ 'NA'))`

1 Ответ

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

Для сравнения одного значения вы должны использовать ==, для сравнения нескольких значений - %in%.

library(dplyr)

NHIS_test <- NHIS1 %>% 
                mutate(RACE = case_when(
                  RACEA %in% c(411, 412, 416, 434) ~ 1, 
                  RACEA == 200 ~ 2, 
                  RACEA == 100 & HISPETH == 10 ~ 3,
                  RACEA == 100 & HISPETH %in% c(20,23,30,40,50,61,62,63,70) ~ 4, 
                  RACEA %in% c(310, 580, 600) ~ 5))

Если ни одно из указанных выше условий не выполнено, по умолчанию возвращается NA.

...