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

如何在flextable或gtsummary中实现表头跨列合并

实现表头跨列合并的表格样式

问题背景

使用dplyr和flextable处理mtcars数据集的代码如下,当前生成的是普通结构表格,希望修改为表头跨列合并的样式:

library(dplyr)
library(flextable)  
mtcars %>% 
  select(mpg, cyl, am) %>% 
  group_by(cyl, am) %>% 
  summarise(mean_mpg = mean(mpg),
            sd_mpg = sd(mpg)) %>% 
  flextable()

方法一:使用flextable实现

通过add_header_row()添加顶层表头并设置跨列合并,配合表头调整实现需求:

library(dplyr)
library(flextable)

mtcars %>% 
  select(mpg, cyl, am) %>% 
  group_by(cyl, am) %>% 
  summarise(mean_mpg = mean(mpg),
            sd_mpg = sd(mpg), .groups = "drop") %>% 
  flextable() %>%
  # 添加跨列顶层表头,colwidths定义每个表头覆盖的列数
  add_header_row(
    values = c("分组信息", "MPG统计"),
    colwidths = c(2, 2)
  ) %>%
  # 替换底层表头文本(可选,增强可读性)
  set_header_labels(
    cyl = "气缸数",
    am = "传动类型",
    mean_mpg = "均值",
    sd_mpg = "标准差"
  ) %>%
  # 合并顶层表头的跨列单元格
  merge_h(part = "header") %>%
  # 可选:添加表格边框美化样式
  theme_booktabs()

关键说明

  • colwidths参数对应顶层表头的列覆盖数,这里分组列共2个、统计列共2个,因此设置为c(2,2)
  • merge_h(part = "header")完成顶层表头的跨列合并,实现视觉上的分组效果

方法二:使用gtsummary实现

利用gtsummary的分组统计功能,结合表头修改实现跨列合并:

library(dplyr)
library(gtsummary)

mtcars %>%
  select(mpg, cyl, am) %>%
  # 将分组列转为因子,优化表头显示文本
  mutate(
    cyl = factor(cyl, labels = c("4缸", "6缸", "8缸")),
    am = factor(am, labels = c("自动", "手动"))
  ) %>%
  # 按双分组变量统计mpg的均值和标准差
  tbl_summary(
    by = c(cyl, am),
    statistic = list(all_continuous() ~ "{mean} ({sd})"),
    include = mpg
  ) %>%
  # 设置顶层表头文本
  modify_header(
    label = "**指标**",
    all_stat_cols() ~ "**分组信息**"
  ) %>%
  # 合并指标列单元格,配合顶层表头实现跨列效果
  merge_rows(columns = label) %>%
  # 可选:转为flextable格式以便进一步样式调整
  as_flex_table()

关键说明

  • by = c(cyl, am)指定双分组变量,statistic定义连续变量的统计输出格式
  • all_stat_cols()匹配所有统计列,统一设置顶层表头文本为"分组信息"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:52:40