【问题标题】:Using case when to evaluate variables across columns and assign buckets使用 case when 跨列评估变量并分配存储桶
【发布时间】:2021-09-24 14:02:58
【问题描述】:

我有一个数据集,其中种族/民族变量分布在多个列中 - 个人可以选择多个类别,但如果他们属于某个类别,我想将他们分组。

例如,如果某人选择了东南亚和南亚两个类别,则新类别会将该人标记为“亚洲人”。同样,如果他们选择古巴人和墨西哥人,我会给他们贴上“西班牙裔/拉丁裔”的标签。但是,如果有人选择东南亚和古巴人,我想将他们标记为多种族。我有 20 多个个人可以做出的选择,并希望将它们组合成更大的类别:亚洲人、黑人、白人、西班牙裔/拉丁裔等。

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))

我还创建了一个“总类别”列,用于计算每个人所做选择的数量。

有没有一种简单的方法可以使用 case_when 或 for 循环来做到这一点?

【问题讨论】:

  • 我建议您创建第二个数据框,其中包含种族/民族和群体之间的对应关系。然后使用匹配算法。

标签: r dataframe for-loop dplyr case-when


【解决方案1】:

这是一种带有辅助功能的方式。

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))

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2021-07-19
    相关资源
    最近更新 更多