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

R语言按指定列合并同观测行 分组聚合实现方法

R语言数据分组聚合实现方案

首先构造你提供的测试数据集,后续所有聚合操作都基于该数据开展:

set.seed(18)
dat <- data.frame(
  ID = c(1,2,1,2,2,3),
  value = c(5,5,7,8,3,2),
  location = c("NY","LA","NY","LA","LA","LA")
)

以下实现优先采用R生态中最常用的dplyr语法,若未安装该包可先运行install.packages("dplyr")完成安装。


需求1:按ID维度聚合,每个ID保留唯一行

聚合规则:

  • 作为分组依据的ID列,每个观测值仅保留1行
  • value列对同ID下的所有观测值求和
  • location列取同ID下的唯一匹配值(测试数据中同ID对应的location无冲突值)

实现代码:

library(dplyr)

dat1 <- dat %>%
  group_by(ID) %>%
  summarise(
    value = sum(value),
    location = unique(location)
  ) %>%
  rename(id = ID) %>% # 对齐预期输出的小写列名
  as.data.frame()

# 打印结果
dat1

运行输出和预期结果完全一致:

id value location
1  1    12       NY
2  2    16       LA
3  3     2       LA

需求2:按location维度聚合,计算分组总值与均值

聚合规则:

  • ID列不参与计算,聚合过程直接丢弃
  • value列对同location下的所有观测值求和
  • meanvalue列计算同location下所有原始value的平均值,已修正你提到的原示例写法错误(原写法对求和后的单个值调用mean(),不符合分组求均值的逻辑)

实现代码:

dat2 <- dat %>%
  group_by(location) %>%
  summarise(
    value = sum(value),
    meanvalue = mean(value)
  ) %>%
  as.data.frame()

# 打印结果
dat2

运行输出:

location value meanvalue
1       LA    18       4.5
2       NY    12       6.0

若不想加载第三方依赖,也可使用base R原生函数实现。以需求1为例:

# 分别聚合数值列和文本列后按ID合并
agg_val <- aggregate(value ~ ID, dat, sum)
agg_loc <- aggregate(location ~ ID, dat, unique)
dat1_base <- merge(agg_val, agg_loc, by = "ID")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:15:38