1

我有一个调查数据集,其中包括自我报告的种族。参与者可以根据需要选择尽可能多的种族。数据结构如下所示:

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

4

1 回答 1

1

我们可以使用apply循环遍历行(MARGIN = 1),然后pastenames不是 NA 的行值

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))
于 2021-07-29T19:10:22.540 回答