创建具有多个列名作为变量的种族变量

Creating an Ethnicity Variable with Multiple Column Names as Variables

我有一个调查数据集,其中包括自我报告的种族。参与者可以 select 任意多的种族。数据结构如下所示:

Hispanic English Indian

1        NA      NA     

NA       1       NA     

NA       NA      1  

NA       1       1

1        1       1   

我想要做的是创建一个新的分类种族变量,其中列名代替上面的 1。此外,如果某人 select 不止一个种族,那么分类种族变量应该包括两者,如下所示:

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[=17 的行值的 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, NA, NA, 1L), 
English = c(NA, 
1L, NA, 1L, 1L), Indian = c(NA, NA, 1L, 1L, 1L)),
 class = "data.frame", row.names = c(NA, 
-5L))