如何按条件合并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
相关产品推荐
相关产品推荐

