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

R dplyr group_by汇总时保留全样本统计值的单管道实现

解决方案

完全可以在单条连续管道里实现,不需要拆分流程存中间表,只要在分组前把全样本作为一个特殊分组加进数据集就行,你之前写好的过滤、汇总、转置、重排逻辑基本不用动。

调整要点

原来的逻辑是过滤缺失值后直接按big_four的0、1值分组,现在只要在过滤完、分组前,给当前数据集追加一份全量副本,给副本的big_four赋一个和0、1不冲突的特殊值(比如99,或者字符型的"total"),后续分组汇总时这个特殊组算出来的就是全样本统计值,最后重命名列的时候把这个组对应成Total列就完事。

代码框架

your_df |> 
  # 原有的缺失值过滤逻辑,不用改
  filter(!is.na(idade_em_2022), !is.na(total_de_cooperados)) |>
  # 新增:追加全样本副本,打特殊分组标记
  bind_rows(
    mutate(., big_four = 99) # 99是全样本标记,和原有0/1不冲突就行
  ) |>
  # 原有的分组汇总逻辑,完全不用改
  group_by(big_four) |>
  summarise_at(
    .vars = vars(idade_em_2022, total_de_cooperados, numeroAgencias),
    .funs = list(minimo = min, media = mean, maximo = max, desvio = sd)
  ) |>
  # 接你原来写好的转置、列重命名、行名转列、拆分、排序逻辑就行
  # 重命名列的时候多配一个映射:big_four=99的列命名为Total
  t() |>
  as.data.frame() |>
  # 重命名示例,对应三个分组:0、1、全样本
  `colnames<-`(c("n_BigFour", "BigFour", "Total")) |>
  # 后面接你原来的后续处理步骤即可
  ...

补充说明

  • 要是你的big_four字段本身就有99这个取值,换个没出现过的值当标记就行,比如先把big_four转成字符型,用"total"当标记,完全不影响三个数值字段的统计计算。
  • 这种写法和你单独算完全表再拼的效率差不多,好处是全程管道不中断,不用写中间赋值语句打乱逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:09:22