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

R语言添加聚合数据列时遭遇行数不匹配问题

问题分析

直接用aggregate()赋值会出错,因为aggregate()返回的是去重分组后的结果(原数据中RC="p5_a"出现2次,聚合后合并为1行,最终得到35行),而原数据集有36行,行数不匹配无法直接赋值为新列。

解决方案

以下是3种可行的实现方式:

方法1:Base R 原生函数ave()

ave()会自动按分组重复填充聚合结果,返回与原数据行数一致的向量:

dt1$CAT <- ave(dt1$DAMT, dt1$RC, FUN = sum)

方法2:tidyverse/dplyr 风格(推荐)

通过分组后直接生成新列,逻辑更清晰:

library(dplyr)
dt1 <- dt1 %>%
  group_by(RC) %>%
  mutate(CAT = sum(DAMT)) %>%
  ungroup() # 取消分组状态,避免后续操作异常

方法3:先聚合再合并

先生成聚合结果表,再通过merge()关联回原数据:

# 生成聚合表
agg_result <- aggregate(DAMT ~ RC, data = dt1, FUN = sum)
colnames(agg_result)[2] <- "CAT"

# 关联回原数据,保留所有原行
dt1 <- merge(dt1, agg_result, by = "RC", all.x = TRUE)
验证结果

处理后,原数据中RC="p5_a"的两行,CAT列都会显示3+2=5,且数据集保持36行,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:27:26