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

如何用dplyr惯用方法将分组聚合结果转为列格式?

优化解决方案(符合dplyr/tidyverse风格)

你可以结合dplyr和tidyr(同属tidyverse生态)的pivot_wider函数,一步完成分组求和+长表转宽表的操作,完全适配type多类别的场景,代码简洁且易维护:

完整代码示例

# 加载依赖包
library(dplyr)
library(tidyr)

# 生成测试数据
set.seed(123)
test_data <- data.frame(
  sample = sample(LETTERS[1:10], 100, replace = TRUE),
  type = sample(letters[1:2], 100, replace = TRUE),
  area = sample(1:100, replace = TRUE)
)

# 分组求和并转宽表
res_df <- test_data %>%
  group_by(sample, type) %>%
  summarise(area_sum = sum(area), .groups = "drop") %>%  # 分组求和,取消分组避免后续警告
  pivot_wider(
    names_from = type,        # 用type的取值作为新列名的一部分
    values_from = area_sum,   # 填充到新列的数值来源
    names_prefix = "area."    # 给新列名添加前缀,生成area.a/area.b格式
  )

# 查看结果
head(res_df)

输出结果

# A tibble: 6 × 3
  sample area.a area.b
  <chr>   <int>  <int>
1 A         244    147
2 B          17    152
3 C         153    541
4 D         107     94
5 E         246    266
6 F         189    286

关键说明

  1. 自动适配多类别:如果type新增c、d等类别,代码无需修改,会自动生成area.c、area.d这类列
  2. 符合tidyverse风格:全程使用管道符%>%串联操作,逻辑清晰,避免手动拆分、合并数据框的繁琐步骤
  3. .groups = "drop":dplyr 1.0.0+版本建议在summarise后明确分组处理方式,这里取消分组是为了后续pivot_wider操作更顺畅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:50:28