You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将多个二元种族虚拟变量合并为单一分类变量

解决方案

方法1:用tidyverse工具链实现

先加载tidyverse包,通过行处理完成种族变量合并:

library(tidyverse)

# 定义种族列与显示名称的对应关系
race_labels <- c(
  race_nhw = "Non-Hispanic White",
  race_nhb = "Non-Hispanic Black",
  race_hlx = "Hispanic/Latino",
  race_as = "Asian",
  race_aian = "American Indian/Alaska Native",
  race_nhpi = "Native Hawaiian/Pacific Islander"
)

# 合并种族变量
df <- df %>%
  rowwise() %>%
  mutate(
    # 提取当前行标记为"Yes"的种族名称
    selected_races = list(race_labels[which(c_across(starts_with("race_")) == "Yes")]),
    # 根据选中种族的数量生成分类
    race_category = case_when(
      length(selected_races) == 0 ~ NA_character_,
      length(selected_races) == 1 ~ selected_races[[1]],
      TRUE ~ "multiracial"
    )
  ) %>%
  ungroup() %>%
  select(-selected_races) # 移除临时变量

方法2:用Base R实现(无需额外包)

如果不想加载第三方包,用Base R的apply函数逐行处理:

# 定义种族列与显示名称的对应关系
race_labels <- c(
  race_nhw = "Non-Hispanic White",
  race_nhb = "Non-Hispanic Black",
  race_hlx = "Hispanic/Latino",
  race_as = "Asian",
  race_aian = "American Indian/Alaska Native",
  race_nhpi = "Native Hawaiian/Pacific Islander"
)

# 筛选所有以"race_"开头的列
race_cols <- grep("^race_", names(df))

# 生成合并后的种族分类列
df$race_category <- apply(df[, race_cols], 1, function(row) {
  yes_count <- sum(row == "Yes")
  if (yes_count == 0) {
    NA_character_
  } else if (yes_count == 1) {
    race_labels[names(row)[row == "Yes"]]
  } else {
    "multiracial"
  }
})

验证输出

执行完代码后,可通过以下命令查看合并结果:

df %>% select(sex, starts_with("race_"), race_category)

内容的提问来源于stack exchange,提问作者HoyaMD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:18:09