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

如何按条件合并dataframe的Ethnicity与Race列?

问题描述

我有如下DataFrame:

> dput(df)
structure(list(Ethnicity = c("Non-Hispanic/Non-Latino", 
"Non-Hispanic/Non-Latino", "Non-Hispanic/Non-Latino", NA, "Non-Hispanic/Non-Latino", 
"Non-Hispanic/Non-Latino", "Hispanic/Latino", "Non-Hispanic/Non-Latino", 
"Non-Hispanic/Non-Latino", NA), Race = structure(c(1L, 
1L, 1L, NA, 5L, 1L, 7L, 1L, 7L, NA), levels = c("White", "2+ Races", 
"American Indian or Alaska Native", "Asian", "Black or African American", 
"Native Hawaiian or Other Pacific Islander", "Other", "Refused/Unknown"
), class = "factor")), row.names = c(NA, -10L), class = c("data.table", 
"data.frame"), .internal.selfref = <pointer: 0x7fe0098120e0>, index = integer(0))

需要合并Ethnicity和Race列的信息:

  • 若个体的Ethnicity为Hispanic/Latino,则将该信息追加到Race列,格式为原Race值 (Hispanic/Latino)
  • 若为Non-Hispanic/Non-Latino或NA,则Race列保持原内容不变

处理后的目标DataFrame如下:

> dput(r)
structure(list(Ethnicity = c("Non-Hispanic/Non-Latino", "Non-Hispanic/Non-Latino", 
"Non-Hispanic/Non-Latino", NA, "Non-Hispanic/Non-Latino", "Non-Hispanic/Non-Latino", 
"Hispanic/Latino", "Non-Hispanic/Non-Latino", "Non-Hispanic/Non-Latino", 
NA), Race = c("White ", "White", "White", NA, "Black or African American", 
"White", "Other (Hispanic/Latino)", "White", "Other", NA)), class = "data.frame", row.names = c(NA, 
-10L))
解决方案

方法1:data.table 原生语法

原始数据为data.table类型,直接用条件赋值高效处理:

# 将Race从因子类型转为字符型
df[, Race := as.character(Race)]
# 对符合条件的行修改Race值
df[Ethnicity == "Hispanic/Latino", Race := paste(Race, "(Hispanic/Latino)")]

方法2:dplyr 语法

如果熟悉tidyverse风格,可用dplyr实现:

library(dplyr)

df_processed <- df %>%
  mutate(Race = as.character(Race)) %>%
  mutate(Race = if_else(Ethnicity == "Hispanic/Latino", 
                        paste(Race, "(Hispanic/Latino)"), 
                        Race))

执行上述任一代码后,即可得到目标格式的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:37:35