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
相关产品推荐
相关产品推荐

