如何在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值后插入:
- 根据你的数据和分组逻辑,编写函数计算每个变量的P值(连续变量用t检验、分类变量用卡方检验等);
- 将变量名与对应P值整理成数据框;
- 通过
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
相关产品推荐
相关产品推荐

