问题描述
我有一个调查数据集,其中包括自我报告的种族。参与者可以根据自己的意愿选择尽可能多的种族。数据结构如下:
Hispanic English Indian
1 NA NA
NA 1 NA
NA NA 1
NA 1 1
1 1 1
我想要做的是创建一个新的分类种族变量,其中列名代替上面的 1。此外,如果有人选择了多个种族,那么分类种族变量应包括两者,如下所示:
Hispanic English Indian Ethnicity
1 NA NA Hispanic
NA 1 NA English
NA NA 1 Indian
NA 1 1 English_Indian
1 1 1 Hispanic_English_Indian
解决方法
我们可以使用 apply
循环遍历行 (MARGIN = 1
),然后 paste
不是 NA 的行值的 names
df1$Ethnicity <- apply(df1,1,function(x)
paste(names(x)[!is.na(x)],collapse= "_"))
-输出
df1
Hispanic English Indian Ethnicity
1 1 NA NA Hispanic
2 NA 1 NA English
3 NA NA 1 Indian
4 NA 1 1 English_Indian
5 1 1 1 Hispanic_English_Indian
数据
df1 <- structure(list(Hispanic = c(1L,NA,1L),English = c(NA,1L,Indian = c(NA,1L)),class = "data.frame",row.names = c(NA,-5L))