用例何时评估跨列的变量并分配存储桶

Using case when to evaluate variables across columns and assign buckets

我有一个数据集,其中 race/ethnicity 个变量分布在多个列中 - 个人可以 select 多个类别,但我想将属于某个类别的人分组。

例如,如果某人 select 分为两个类别,东南亚和南亚,新类别会将此人标记为 'asian.' 同样,如果他们选择古巴和墨西哥,我会标记他们 'hispanic/latino.' 但是,如果有人选择东南亚和古巴,我想将他们标记为多种族。我有 20 多个个人可以做出的选择,我想将它们组合成更大的类别:亚洲人、黑人、白人、hispanic/latino 等

data <- data.frame(race_se_asian = c(0,1,1,0,0,0,1,0,0,0,0),
                   race_south_asian = c(0,l,0,0,1,0,1,0,0,0),
                   race_european = c(1,0,1,0,0,0,0,0,0,0),
                   race_cuban = c(1,0,1,0,0,0,0,0,0,0),
                   race_mexican = c(1,0,1,0,0,0,0,0,0,0))

我还创建了一个 'total categories' 列来计算每个人制造的 select 离子数。

有没有使用 case_when 或 for 循环的简单方法?

这里有一个有辅助功能的方法

library(dplyr)

fun <- function(x, groups){
  i <- which(x == 1)
  if(length(i)){
    g <- groups[i, "groups"]
    g <- unique(g)
    if(length(g) == 1) g else "multiracial"
  } else NA_character_
}

groups <- c("asian", "asian", "european", "hispanic/latino", "hispanic/latino")
groups <- data.frame(ethnicity = names(data), groups)

data %>%
  rowwise() %>%
  mutate(category = fun(c_across(everything()), groups))