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

如何用gtsummary生成按SOC/PT分组的患者年风险与发病率表

用gtsummary实现SOC/PT嵌套分组的安全性统计表格

你的gt实现示例代码及效果

gt代码

library(gt)
library(dplyr)

# 模拟安全性事件数据
safety_data <- tibble(
  SOC = c(rep("消化系统", 3), rep("神经系统", 2)),
  PT = c("恶心", "呕吐", "腹泻", "头痛", "头晕"),
  n_events = c(12, 8, 5, 6, 3),
  patient_years = c(240, 240, 240, 240, 240),
  rate_100py = n_events / patient_years * 100
)

# 构建嵌套分组表格
gt_safety_table <- safety_data %>%
  group_by(SOC) %>%
  gt(groupname_col = "SOC") %>%
  tab_header(title = "安全性事件统计(按SOC/PT分组)") %>%
  fmt_number(columns = rate_100py, decimals = 2) %>%
  cols_label(
    PT = "首选术语(PT)",
    n_events = "事件数",
    patient_years = "患者年",
    rate_100py = "每100患者年发病率"
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_group(groups = TRUE)
  )

gt_safety_table

gt实现效果

gt实现的SOC/PT嵌套统计表格

gtsummary实现方案

gtsummary可以通过add_row_group()结合tbl_summary()快速实现嵌套分组,同时自带临床统计常用的格式化逻辑,以下是对应代码:

library(gtsummary)
library(dplyr)

# 使用与gt示例相同的模拟数据
safety_data <- tibble(
  SOC = c(rep("消化系统", 3), rep("神经系统", 2)),
  PT = c("恶心", "呕吐", "腹泻", "头痛", "头晕"),
  n_events = c(12, 8, 5, 6, 3),
  patient_years = c(240, 240, 240, 240, 240),
  rate_100py = n_events / patient_years * 100
)

# 构建嵌套分组的统计表格
gtsummary_safety_table <- safety_data %>%
  tbl_summary(
    include = c(PT, n_events, patient_years, rate_100py),
    label = list(
      PT ~ "首选术语(PT)",
      n_events ~ "事件数",
      patient_years ~ "患者年",
      rate_100py ~ "每100患者年发病率"
    ),
    # 针对不同列设置统计格式
    statistic = list(
      n_events ~ "{.}",
      patient_years ~ "{.}",
      rate_100py ~ "{fmt_number(., decimals = 2)}"
    )
  ) %>%
  # 添加SOC作为行分组,实现嵌套效果
  add_row_group(
    variable = SOC,
    label = ~.y
  ) %>%
  # 高亮分组行
  modify_table_styling(
    locations = cells_row_groups(),
    style = list(cell_text(weight = "bold"))
  ) %>%
  # 添加表格标题
  modify_caption("安全性事件统计(按SOC/PT分组)")

gtsummary_safety_table

进阶:多层级嵌套扩展

如果需要在SOC下再添加次级分组(如严重程度),可以用tbl_strata()实现:

# 扩展数据:增加严重程度列
safety_data_extended <- safety_data %>%
  mutate(severity = c("轻度", "中度", "轻度", "中度", "轻度"))

# 构建双层嵌套表格
gtsummary_nested_table <- tbl_strata(
  data = safety_data_extended,
  strata = SOC, # 第一层分组:SOC
  .tbl_fun = function(data) {
    data %>%
      tbl_summary(
        by = severity, # 第二层分组:严重程度
        include = c(PT, n_events, rate_100py),
        label = list(PT ~ "首选术语(PT)", n_events ~ "事件数", rate_100py ~ "每100患者年发病率"),
        statistic = list(rate_100py ~ "{fmt_number(., decimals = 2)}")
      )
  }
) %>%
  modify_table_styling(
    locations = cells_row_groups(),
    style = list(cell_text(weight = "bold"))
  )

gtsummary_nested_table

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:10:53