R数据框按分组将同组男性Rate值合并到女性Rate值的实现方法
R实现分组新增Rate2列的解决方案
需求说明
现有数据框每组包含性别为M、F的两条记录,需新增列Rate2,规则如下:
- 性别为M的行,
Rate2值与原Rate列完全一致 - 性别为F的行,
Rate2值为同组M的Rate值加当前行原Rate值
方案1:dplyr包实现(推荐,代码简洁易读)
# 未安装包先运行 install.packages("dplyr") library(dplyr) df <- df %>% group_by(Group) %>% # 按分组字段分组 mutate(Rate2 = ifelse(Sex == "M", Rate, Rate[Sex == "M"] + Rate)) %>% ungroup() # 解除分组,避免后续操作受分组影响
方案2:基础R实现(无需安装第三方包)
# 提取每个分组对应的M性别Rate值,构建命名向量用于匹配 m_rate_map <- with(df[df$Sex == "M", ], setNames(Rate, Group)) # 新增Rate2列 df$Rate2 <- ifelse(df$Sex == "M", df$Rate, m_rate_map[as.character(df$Group)] + df$Rate)
运行结果示例
使用示例数据运行后输出如下:
Group Sex Rate Rate2 1 A M -1.0678237 -1.0678237 2 A F -0.2179749 -1.2857986 3 B M -1.0260044 -1.0260044 4 B F -0.7288912 -1.7548956 5 C M -0.6250393 -0.6250393 6 C F -1.6866933 -2.3117326 7 D M 0.8377870 0.8377870 8 D F 0.1533731 0.9911601 9 E M -1.1381369 -1.1381369 10 E F 1.2538149 0.1156780
内容的提问来源于stack exchange,提问作者Gabrielle Macklin
相关产品推荐
相关产品推荐

