从R的数据框中的现有列创建新的Race变量(使用case_when函数)

问题描述 投票:1回答:1

我正在使用来自美国国家健康访问调查的数据,并试图将种族变量简化为5个类别。我想从现有数据中创建一个新标题为“ RACE”的列,其中包括亚洲人= 1,黑人= 2,白人(非西班牙裔)= 3,西班牙裔= 4,其他= 5。当前,race变量的标题为“ 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'))`
r multiple-columns new-operator case-when
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.