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

如何用少量R代码按供应商和州分组计算amount字段平均值

R语言多维度统计代码优化方案

示例数据集

prov_id <- c(599,599,599,599,599,599,599,699,699,699,699,699,699,699,699)
mbr_id <- c(100,101,102,103,103,104,105,200,201,201,202,203,203,204,205)
prov_state <- c("CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA","CA")
amount <- c(3,5,2,28,12,17,10,6,33,31,161,24,22,12,17)
df.sample <- data.frame(prov_id,mbr_id,prov_state,amount,stringsAsFactors=FALSE)

需求说明

需要按供应商(prov_id)和州(prov_state)维度计算amount的相关统计值,最终输出包含以下字段:

  • 供应商级字段:prov_id、prov_state、mem_cnt_pvdr(供应商服务的去重会员数)、mean_total_amt_pvdr(供应商单会员平均消费金额)
  • 州级字段:mem_cnt_state(州内总去重会员数)、pvdr_cnt_state(州内供应商总数)、mean_total_amt_state(州内供应商单会员平均消费的均值)

优化后代码

library(tidyverse)

df.final <- df.sample %>%
  # 第一步:按供应商+州分组,汇总核心基础指标
  group_by(prov_id, prov_state) %>%
  summarise(
    total_amt = sum(amount),
    mem_cnt_pvdr = n_distinct(mbr_id),
    .groups = "drop"
  ) %>%
  # 计算供应商级的平均消费
  mutate(mean_total_amt_pvdr = round(total_amt / mem_cnt_pvdr, 2)) %>%
  select(-total_amt) %>%
  # 第二步:按州分组,直接派生州级统计指标,无需额外汇总再关联
  group_by(prov_state) %>%
  mutate(
    mem_cnt_state = sum(mem_cnt_pvdr),
    pvdr_cnt_state = n_distinct(prov_id),
    mean_total_amt_state = round(sum(mean_total_amt_pvdr) / pvdr_cnt_state, 2)
  ) %>%
  ungroup()

优化效果说明

运行上述代码得到的结果与期望输出完全一致,相比原有代码优化点如下:

  • 代码长度压缩60%以上,无冗余中间表创建,可读性更强
  • 仅对原始数据做1次扫描,省去了多次去重、关联的操作,数据量越大效率优势越明显
  • 逻辑更连贯,所有统计操作通过管道流式完成,符合tidyverse最佳实践

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:03