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

如何在gtsummary的tbl_merge合并表中添加P值?

给tbl_merge合并后的gtsummary表格添加P值的方案

直接在tbl_merge()后调用add_p()是行不通的——add_p()默认仅支持单个tbl_summary或tbl_regression对象,合并后的表格结构不符合它的输入要求。下面提供两种可行的解决思路:

方法一:先给子表格单独加P值再合并

如果需要每个子表格各自显示对应的P值,先分别为gene_colt和colt添加P值,再执行合并操作:

# 为每个子表单独计算并添加P值
gene_colt_with_p <- gene_colt %>% add_p()
colt_with_p <- colt %>% add_p()

# 合并带P值的子表格
merge_table <- tbl_merge(
  tbls = list(gene_colt_with_p, colt_with_p),
  tab_spanner = c("**gene COLT**", "**COLT**")
)

方法二:手动计算P值后添加到合并表格

如果需要在合并后的表格末尾新增统一的P值列,可手动计算P值后插入:

  1. 根据你的数据和分组逻辑,编写函数计算每个变量的P值(连续变量用t检验、分类变量用卡方检验等);
  2. 将变量名与对应P值整理成数据框;
  3. 通过modify_table_body()和modify_table_header()将P值列加入表格。

示例代码(假设你的分组变量为group,原始数据框为df):

# 定义计算P值的函数
calc_p <- function(var) {
  if (is.numeric(df[[var]])) {
    # 连续变量用t检验
    t.test(df[[var]] ~ df$group)$p.value
  } else {
    # 分类变量用卡方检验
    chisq.test(table(df[[var]], df$group))$p.value
  }
}

# 生成包含变量名和P值的数据框
p_df <- tibble(
  variable = c("变量A", "变量B", "变量C"), # 替换为你的实际变量名
  p_value = map_dbl(variable, calc_p)
)

# 合并表格并插入P值列
merge_table <- tbl_merge(
  tbls = list(gene_colt, colt),
  tab_spanner = c("**gene COLT**", "**COLT**")
) %>%
  modify_table_body(
    ~ left_join(., p_df, by = "variable") %>%
      mutate(p_col = ifelse(is.na(p_value), "", sprintf("%.3f", p_value)))
  ) %>%
  modify_table_header(p_col ~ "**P值**")

注意事项

  • 确保gene_colt和colt都是由tbl_summary()生成的汇总表格,且分组逻辑一致;
  • 手动计算P值时,要根据变量类型选择匹配的统计方法,避免统计错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:46:11