从 R 中数据框中的现有列创建新的种族变量(使用 case_when 函数)
Creating a New Race Variable from Existing Column in Data Frame in R (with case_when function)
我正在处理来自全国健康访谈调查的数据,并试图将种族变量简化为 5 个桶。我想根据现有数据创建一个标题为 "RACE" 的新列,其中包括亚裔 =1、黑人=2、白人 (non-Hispanic)=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
因此,要创建白人 (non-Hispanic) 和西班牙裔价值观,我需要 R 来同时使用 RACEA 和 HISPETH 的列值。
这是我尝试 运行 以执行所有这些操作的代码,但我遇到了错误消息,即 "the longer the object length is not a multiple of shorter object length" 包含 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'))`
要比较单个值,您应该使用 ==
,要比较多个值,请使用 %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))
如果满足以上条件none则默认为returnNA
。
我正在处理来自全国健康访谈调查的数据,并试图将种族变量简化为 5 个桶。我想根据现有数据创建一个标题为 "RACE" 的新列,其中包括亚裔 =1、黑人=2、白人 (non-Hispanic)=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
因此,要创建白人 (non-Hispanic) 和西班牙裔价值观,我需要 R 来同时使用 RACEA 和 HISPETH 的列值。
这是我尝试 运行 以执行所有这些操作的代码,但我遇到了错误消息,即 "the longer the object length is not a multiple of shorter object length" 包含 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'))`
要比较单个值,您应该使用 ==
,要比较多个值,请使用 %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))
如果满足以上条件none则默认为returnNA
。