我对如何根据我从每个其他列中获得的字符组合填充我的新列有点困惑。
这是我的原始数据框架:
df <- data.frame('Hispanic'=c("N", "Y", "N", "N"), 'Black'=c("Y", "N", "N", "Null"), 'Asian'=c("N", "Y", "N", "N"),
'HN'=c("N", "N", "N", "N"), 'AN'=c("N", "N", "N", "Y"), 'White'=c("N", "Y", "N", "Null"),
'NA'=c("N", "N", "Y", "Y"))
我想根据种族和民族的不同组合对新列中的变量进行编码。具体来说,我试图将这些因素分为黑人(非西班牙裔)、亚洲人(非西班牙裔)、夏威夷原住民(非西班牙裔)、美洲印第安人/阿拉斯加原住民(非西班牙裔)、多种族(非西班牙裔)和西班牙裔。因此,每当一条记录的Hispanic值为"是"时,填充值就应该是Hispanic,但如果值为"否",则应该详细说明非Hispanic选择的单一种族(例如:Black, NH),或者如果他们选择了多个种族,则应该是多种族和非西班牙裔(例如:multiracial, NH)。
目标是得到如下所示的结果:
df1 <- data.frame('Hispanic'=c("N", "Y", "N", "N"), 'Black'=c("Y", "N", "N", "Null"), 'Asian'=c("N", "Y", "N", "N"),
'HN'=c("N", "N", "N", "N"), 'AN'=c("N", "N", "N", "Y"), 'White'=c("N", "Y", "N", "Null"),
'NA'=c("N", "N", "Y", "Y"),
'R_E'=c("Black, NH", "Hispanic", "Native American, NH", "Multi-racial, NH" ))
df %>%
rowid_to_column() %>%
left_join(pivot_longer(.,-rowid) %>%
group_by(rowid) %>%
mutate(value = value == 'Y') %>%
summarise(value = if(any(name =='Hispanic' & value))
'Hispanic' else paste(if (sum(value)>1)
'multiracial' else name[value], 'NH')))
rowid Hispanic Black Asian HN AN White NA. value
1 1 N Y N N N N N Black NH
2 2 Y N Y N N Y N Hispanic
3 3 N N N N N N Y NA. NH
4 4 N Null N N Y Null Y multiracial NH