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

如何用gtsummary按行分组展示两个嵌套变量的汇总表?

使用gtsummary实现嵌套分组汇总表

示例数据集

df <- data.frame(
  classification = c("independant professions", "independant professions", "workers", "workers"),
  occupations = c("Lawyer", "Doctor", "Mason", "Painter")
)

实现方案

完全可以通过gtsummary包实现目标嵌套分组汇总表,以下提供两种实用方法:

方法1:利用tbl_strata()构建分层嵌套表

这种方法通过按上层分类拆分数据,再合并结果生成嵌套结构,最贴近目标样式:

library(gtsummary)
library(dplyr)

df %>%
  tbl_strata(
    # 按上层分类分组
    strata = classification,
    # 每个分组内生成职业的汇总表
    .tbl_fun = ~.x %>%
      tbl_summary(
        include = occupations,
        statistic = everything() ~ "{n}",
        missing = "no"
      ) %>%
      modify_header(label = "职业"),
    # 设置分组标题格式
    .header = "**{strata}**"
  ) %>%
  # 添加表头跨栏标题
  modify_spanning_header(everything() ~ "分类与职业汇总") %>%
  # 转换为gt对象并设置分组为列内嵌套
  as_gt() %>%
  gt::tab_options(row_group.as_column = TRUE)

方法2:手动修改表体构建层级结构

如果需要更灵活的自定义层级,可直接修改表体的行类型和缩进:

library(gtsummary)
library(dplyr)

df %>%
  tbl_summary(
    include = c(classification, occupations),
    statistic = everything() ~ "{n}",
    missing = "no"
  ) %>%
  modify_table_body(
    ~.x %>%
      mutate(
        # 定义行层级:分类为一级标签,职业为二级层级
        row_type = case_when(
          variable == "classification" ~ "label",
          TRUE ~ "level"
        ),
        # 为职业行添加缩进
        indent = variable == "occupations"
      )
  ) %>%
  modify_header(label = "分类/职业")

说明

  • 方法1生成的表格会将上层分类作为行组嵌套在列内,与目标示例的视觉结构完全一致。
  • 方法2通过手动配置层级和缩进,适合需要调整层级样式的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:24:57