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

使用dplyr生成按站点及子类别汇总统计表格的技术问题

解决方案:用dplyr生成包含站点总计与子类别统计的表格

需求说明

需要生成以站点(site)为行的统计表格,包含两类统计:

  • 站点全数据集的total_count(总数)与Mean_per_litre(每升均值)
  • 站点下各子类别f_grp对应的total_count(子类别的总数),且均值沿用站点全数据集的均值(而非子类别的子集均值)

实现代码

library(dplyr)
library(tidyr)

# 统一处理数据类型
dat <- dat %>%
  mutate(
    site = as.factor(site),
    count = as.numeric(count),
    f_grp = as.factor(f_grp)
  )

# 1. 计算每个站点的总计统计
site_totals <- dat %>%
  group_by(site) %>%
  summarise(
    total_count = sum(count, na.rm = TRUE),
    Mean_per_litre = mean(count_l_site, na.rm = TRUE)
  )

# 2. 计算每个站点下各f_grp的total_count,并转为宽格式
fg_totals <- dat %>%
  group_by(site, f_grp) %>%
  summarise(
    fg_total_count = sum(count, na.rm = TRUE)
  ) %>%
  pivot_wider(
    names_from = f_grp,
    values_from = fg_total_count,
    names_prefix = "total_count_"
  )

# 3. 合并结果并调整列顺序,确保总计列前置
final_table <- site_totals %>%
  left_join(fg_totals, by = "site") %>%
  select(
    site,
    total_count,
    Mean_per_litre,
    starts_with("total_count_")
  )

final_table

代码说明

  • 站点总计计算:按site分组,统计全站点的count总和与count_l_site均值,加入na.rm = TRUE避免因缺失值导致计算错误。
  • 子类别统计转宽:按site和f_grp分组统计子类别的count总和,通过pivot_wider将子类别转为列,自动生成带前缀的列名(如total_count_1b),避免列名混乱。
  • 合并与列序优化:用left_join合并总计与子类别数据,通过select强制将总计列放在最前面,子类别列依次跟随,保证表格结构清晰、符合阅读习惯。

最终表格结构示例

sitetotal_countMean_per_litretotal_count_1btotal_count_1ctotal_count_1d...
11202.4453025...
2981.96283218...

每个站点单独一行,总计列前置,同时清晰展示各子类别总数,均值统一使用站点全数据集的计算结果,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 06:25:16