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

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

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

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

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

Следовательно, чтобы создать белое (не латиноамериканское) и испаноязычное значения, мне нужно R, чтобы использовать значения столбцов RACEA и HISPETH.

Вот код, который я пытался запустить, чтобы сделать все это, но я был встречен с сообщением об ошибке, что «чем больше длина объекта, не кратно более короткой длине объекта» для части со списком значений 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'))`

person juliah0494    schedule 25.04.2020    source источник


Ответы (1)


Для сравнения одного значения следует использовать ==, для сравнения нескольких значений - %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.

person Ronak Shah    schedule 25.04.2020