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

使用gtsummary生成事件表,如何添加行级事件汇总行?

用gtsummary实现行级事件总数统计的解决方案

问题背景

需要用gtsummary生成事件表,在表末添加一行统计所有行的事件总数,但add_overall()和add_n()仅支持列内跨组统计同一事件,无法实现行级汇总;尝试转为gt对象使用summary_rows()时因变量类型为factor报错。

示例数据

set.seed(123) # 设置种子确保结果可复现
x1 <- sample(c("No", "Yes"), 30, replace = TRUE, prob = c(0.85, 0.15))
x2 <- sample(c("No", "Yes"), 30, replace = TRUE, prob = c(0.9, 0.1))
x3 <- sample(c("No", "Yes"), 30, replace = TRUE, prob = c(0.75, 0.25))
y <- sample(c("A", "B"), 30, replace = TRUE, prob = c(0.5, 0.5))

df <- data.frame(as_factor(x1), as_factor(x2), as_factor(x3), as_factor(y))
colnames(df) <-c("event_1", "event_2", "event_3", "group")

# 初始表格(无总事件行)
tbl_summary(df, by=group,  statistic = all_categorical() ~ "{n}")

解决方案

方法1:提前计算总事件数并加入表格

先在原数据中统计每个样本的总事件数,再汇总各组的总事件数,最后将该行添加到gtsummary表格中:

# 计算每个样本的"Yes"事件数,再按组求和
df$total_events <- rowSums(df[, c("event_1", "event_2", "event_3")] == "Yes")
total_by_group <- aggregate(total_events ~ group, df, sum)

# 创建表格并添加总事件行
tbl <- tbl_summary(df[, c("event_1", "event_2", "event_3", "group")], 
                   by = group,  
                   statistic = all_categorical() ~ "{n}") %>%
  modify_table_body(
    ~ .x %>%
      bind_rows(
        tibble(
          variable = "total_events",
          label = "总事件数",
          stat_0 = total_by_group$total_events[total_by_group$group == "A"],
          stat_1 = total_by_group$total_events[total_by_group$group == "B"],
          row_type = "label"
        )
      )
  )

tbl

方法2:直接从gtsummary结果提取数据计算汇总

无需修改原数据,直接从已生成的表格对象中提取各组事件计数,求和后添加新行:

# 创建初始表格
tbl <- tbl_summary(df, by=group,  statistic = all_categorical() ~ "{n}")

# 提取各事件的"Yes"计数
event_counts <- tbl$table_body %>%
  filter(variable %in% c("event_1", "event_2", "event_3")) %>%
  select(starts_with("stat_")) %>%
  mutate(across(everything(), ~ as.numeric(str_extract(.x, "\\d+"))))

# 计算各组总事件数
total_counts <- colSums(event_counts, na.rm = TRUE)

# 添加总事件行
tbl <- tbl %>%
  modify_table_body(
    ~ .x %>%
      bind_rows(
        tibble(
          variable = "total_events",
          label = "总事件数",
          stat_0 = total_counts[1],
          stat_1 = total_counts[2],
          row_type = "label"
        )
      )
  )

tbl

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:25:13