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

如何在R中创建嵌套表格?实现多维度分组均值的层级展示

实现嵌套表头表格的方法

你的数据已按years、category、type、theme完成分组(每组仅1个count值,平均值即自身),可通过数据重塑+表格渲染工具实现需求格式的嵌套表格,以下是两种可行方案:

方案1:使用tidyr + gt包(适合生成交互式/网页表格)

1. 安装并加载依赖包

install.packages(c("tidyr", "gt"))
library(tidyr)
library(gt)

2. 重塑数据为宽格式

将年份作为分类下的子列,整理成表格所需结构:

df_wide <- df %>%
  pivot_wider(
    id_cols = c(type, theme),
    names_from = c(category, years),
    values_from = count,
    values_fn = mean  # 因每组仅1个值,均值与原count一致
  )

3. 生成嵌套表头表格

利用gt自动识别列名分隔符,生成多层嵌套表头:

df_wide %>%
  gt() %>%
  tab_spanner_delim(delim = "_") %>%  # 按下划线拆分列名,生成上层分类、下层年份的嵌套表头
  fmt_number(columns = everything(), decimals = 0) %>%  # 格式化数字为整数
  row_group_order(groups = unique(df$type)) %>%  # 按Type分组展示行
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_row_groups()
  ) %>%
  opt_vertical_padding(scale = 1.2)  # 调整行间距提升可读性

运行后会生成完全匹配你需求的表格:上层为Category1/Category2,下层对应2010/2011年份;行按Type分组,子行展示Theme,单元格显示对应count平均值。

方案2:使用flextable包(适合导出为Word/PDF格式)

1. 安装并加载依赖包

install.packages("flextable")
library(flextable)

2. 生成嵌套表头表格

df %>%
  pivot_wider(
    id_cols = c(type, theme),
    names_from = c(category, years),
    values_from = count,
    values_fn = mean
  ) %>%
  flextable() %>%
  # 手动构建嵌套表头
  add_header_row(
    values = c("", "", "Category1", "Category1", "Category2", "Category2"),
    colwidths = c(2, 2, 2)
  ) %>%
  set_header_labels(
    type = "Type",
    theme = "Theme",
    Category1_2010 = "2010",
    Category1_2011 = "2011",
    Category2_2010 = "2010",
    Category2_2011 = "2011"
  ) %>%
  merge_h(part = "header") %>%  # 合并上层表头单元格
  bold(part = "header") %>%
  autofit()  # 自动调整列宽

该方案生成的表格可直接导出为Word、PDF等格式,适合文档排版场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 16:42:56