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

如何用gtsummary在R中生成指定交叉表并添加Fisher精确检验P值

解决方案

以下是针对需求编写的R代码,基于gtsummary包实现指定的2×3交叉表,包含分层Fisher精确检验P值:

1. 模拟符合要求的数据集(可替换为你的真实数据)

set.seed(123)
library(tidyverse)
library(gtsummary)

# 构造虚拟数据集(已完成因子转换与标注)
df <- tibble(
  治疗方案 = factor(sample(c("药物A", "药物B"), 50, replace = TRUE)),
  癌症分级 = factor(sample(c("I级", "II级", "III级"), 50, replace = TRUE)),
  生存结局 = factor(sample(c("Survived", "Died"), 50, replace = TRUE))
)

2. 生成目标交叉表代码

tbl_strata(
  data = df,
  strata = 治疗方案,  # 按治疗方案分层
  .tbl_fun = function(data) {
    data %>%
      # 按生存结局分组统计癌症分级的频数
      tbl_summary(
        by = 生存结局,
        include = 癌症分级,
        type = all_categorical() ~ "categorical",
        statistic = all_categorical() ~ "{n}"
      ) %>%
      # 过滤掉Survived对应的行,仅保留Died列的统计结果
      modify_table_body(filter, variable == "癌症分级" & label == "Died") %>%
      # 添加Fisher精确检验,分析癌症分级与死亡的关联
      add_p(test = all_categorical() ~ "fisher.test") %>%
      # 调整表头与格式,移除冗余注释
      modify_header(label ~ "癌症分级") %>%
      modify_footnote(everything() ~ NA)
  },
  .header = "**{strata}**"  # 设置分层标题格式
) %>%
  modify_spanning_header(all_stat_cols() ~ "死亡情况")  # 添加跨列表头

代码关键说明

  • tbl_strata():实现按治疗方案分层处理,每个药物单独生成子表
  • modify_table_body():精准过滤掉Survived的统计行,只保留Died列的癌症分级频数
  • add_p():为每个分层添加Fisher精确检验P值,检验癌症分级与死亡结局的关联
  • 格式调整:通过modify_header()和modify_spanning_header()优化表格可读性,确保输出为2×3结构(3个癌症分级类别 + 1列死亡频数 + P值行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:17:48