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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:27:20