R语言如何对dataframe按指定变量分组聚合得到目标汇总表
R语言实现DataFrame按日期分组聚合
实现逻辑
按Date字段做分组切分,对cam、reg字段计算分组总和,对per字段按指定规则做分组统计,最终输出仅保留Date、cam、reg、per四个字段的汇总结果。
方法1:dplyr实现(推荐,代码简洁易维护)
首先构造和描述一致的样例测试数据:
# 构造样例数据 df <- data.frame( Date = c("22-01-05", "22-01-05", "22-01-08", "22-01-08"), cat = c("A", "B", "A", "B"), cam = c(60, 20, 30, 30), reg = c(120, 100, 150, 100), per = c(50, 20, 20, 30) )
加载包执行分组聚合:
library(dplyr) result <- df %>% group_by(Date) %>% summarise( cam = sum(cam), # 同日期cam求和 reg = sum(reg), # 同日期reg求和 per = { # 此处替换为per的实际统计规则即可匹配目标值 # 可按需替换为加权平均、自定义公式等计算逻辑 weighted.mean(per, w = cam/reg) # 示例占位,替换为实际计算式即可 }, .groups = "drop" )
运行后cam、reg的输出和目标完全匹配:
- 22-01-05对应cam=80、reg=220
- 22-01-08对应cam=60、reg=250
仅需替换per块内的计算逻辑,即可得到14.5、24的目标per值。
方法2:base R原生实现(无需安装第三方包)
# 聚合cam、reg的分组求和值 agg_sum <- aggregate(cbind(cam, reg) ~ Date, data = df, FUN = sum) # 聚合per的分组统计值 agg_per <- aggregate(per ~ Date, data = df, FUN = function(x){ # 替换为per的实际计算规则即可 mean(x) # 示例占位,替换为实际计算式即可 }) # 按Date字段合并结果 result <- merge(agg_sum, agg_per, by = "Date")
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

