使用 Dplyr 在 R 中将非互斥种族类别转换为互斥类别

问题描述 投票:0回答:1

我有兴趣将非互斥的种族类别重新编码为互斥的种族类别。

这篇文章对于使用 baseR 很有帮助,但我想知道是否有一个简洁的版本可以做到这一点: 将非互斥变量重新编码为互斥变量 这篇文章几乎很有帮助,但并不完全适用: 根据条件(互斥类别)将不同的虚拟变量组合成单个类别变量?

以下是如何设置数据的示例:

enter image description here

“1”表示参与者勾选了此答案。 “0”表示参与者没有勾选答案。

我想创建一个名为“RaceCount”的新变量,它将 1 的出现次数相加,如果该值大于 1,则该值可以算作一个名为“Multiracial”的新值。如果计数仅为“1”,则该值将恰好与参与者的回答相匹配。有什么方法可以使用 tidy 来使用它吗?

我尝试过类似的方法,但我不断得到奇怪的计数:

df <- df %>% 
  group_by(White, Asian, Black) %>% mutate(RaceCount = n())

我正在设想这样的事情:

ID White Black Asian RaceCount
1   1      0      0      White
2   1      0      0      White
3   1      0      0      White
4   1      0      1      Multiracial
5   1      0      1      Multiracial
6   0      0      1      Asian
7   0      1      0      Black
8   0      1      0      Black
9   1      0      0      White
10  0      1      0      Black
r dplyr tidyverse rstudio recode
1个回答
0
投票
cbind(df, 
     Race = ifelse(rowSums(df[-1]) > 1, "Multiracial", names(df[-1])[max.col(df[-1])]))

   ID White Black Asian        Race
1   1     1     0     0       White
2   2     1     0     0       White
3   3     1     0     0       White
4   4     1     0     1 Multiracial
5   5     1     0     1 Multiracial
6   6     0     0     1       Asian
7   7     0     1     0       Black
8   8     0     1     0       Black
9   9     1     0     0       White
10 10     0     1     0       Black
© www.soinside.com 2019 - 2024. All rights reserved.