R语言中如何实现data frame数据框指定行的自定义求和?
R按自定义规则对数据框行分组求和实现方法
示例数据与目标
原始测试数据构造代码:
df_new <- data.frame(country = c('US', 'US','US', 'UK','UK','UK'), team = c('A', 'B','C','A','F', 'E'), x1990 = c(11, 8,2,16,1,21), x2005 = c(6, 4,2,10,1, 14))
期望输出的求和结果结构:
df_sum <- data.frame(country = c('US','US', 'UK','UK'), team = c('A', 'B','A','F'), x1990 = c(11, 10,16,22), x2005 = c(6, 6,10, 15))
从示例可提取本次使用的自定义合并规则:
- US分组:队伍A单独保留统计,队伍B、C的数值合并到队伍B名下求和
- UK分组:队伍A单独保留统计,队伍F、E的数值合并到队伍F名下求和
具体实现方案
方法1:dplyr包实现(推荐,易维护自定义规则)
核心逻辑是先按规则重编码需要合并的分组,再分组对数值列求和:
# 加载dplyr包 library(dplyr) df_sum <- df_new %>% # 重编码team列,完成自定义合并映射 mutate(team = case_when( country == "US" & team == "C" ~ "B", country == "UK" & team == "E" ~ "F", TRUE ~ team # 无需合并的分组保持原名称 )) %>% # 按国家、处理后的队伍分组,对数值列求和 group_by(country, team) %>% summarise(across(c(x1990, x2005), sum), .groups = "drop")
提示:后续如果需要调整合并规则,只需要在mutate步骤增减对应的判断映射即可,求和逻辑无需改动。
方法2:基础R实现(无需安装第三方包)
# 按自定义规则重编码team列 df_new$team[df_new$country == "US" & df_new$team == "C"] <- "B" df_new$team[df_new$country == "UK" & df_new$team == "E"] <- "F" # 调用聚合函数完成分组求和 df_sum <- aggregate(cbind(x1990, x2005) ~ country + team, data = df_new, FUN = sum)
两种方法运行后得到的结果都和期望输出完全匹配。
内容的提问来源于stack exchange,提问作者Arwen
相关产品推荐
相关产品推荐

