在R中合并gt_summary生成的三个tbl_strata汇总表的方法咨询
解决gt_summary中tbl_strata表横向合并的方法
核心思路
由于tbl_strata生成的表结构特殊,无法直接用tbl_merge合并,我们可以借助gt包的列合并功能,先对齐变量行,再将三个表的统计列横向拼接,保留统一的变量特征列。
步骤与代码
假设你已生成table_one、table_two、table_three三个tbl_strata对象:
- 对齐变量顺序
确保三个表的变量行完全匹配,避免合并时错位:
table_two <- table_two %>% modify_table_body(~.x %>% arrange(match(variable, table_one$table_body$variable))) table_three <- table_three %>% modify_table_body(~.x %>% arrange(match(variable, table_one$table_body$variable)))
- 拆分并合并列
将表转为gt对象,拆分出变量列和统计列后拼接:
# 提取第一个表的变量特征列 gt_var_col <- table_one %>% as_gt() %>% cols_select(label) # 提取三个表的统计列(跳过变量列) gt_stats1 <- table_one %>% as_gt() %>% cols_select(-label) gt_stats2 <- table_two %>% as_gt() %>% cols_select(-label) gt_stats3 <- table_three %>% as_gt() %>% cols_select(-label) # 合并所有列得到最终表 final_table <- gt_var_col %>% cols_bind(gt_stats1, gt_stats2, gt_stats3)
- 可选格式调整
优化列标题和样式:
final_table <- final_table %>% tab_style( style = cell_text(weight = "bold"), locations = cells_column_labels() ) %>% cols_label(label = "变量特征")
备选方案:手动合并底层数据框
如果需要更精细的列控制,可以提取表的核心数据框手动合并:
# 提取每个表的核心数据,重命名统计列避免重复 df1 <- table_one$table_body %>% select(variable, label, starts_with("stat_"), p.value) df2 <- table_two$table_body %>% select(variable, starts_with("stat_"), p.value) %>% rename_with(~paste0(., "_2"), -variable) df3 <- table_three$table_body %>% select(variable, starts_with("stat_"), p.value) %>% rename_with(~paste0(., "_3"), -variable) # 合并数据框 combined_df <- df1 %>% left_join(df2, by = "variable") %>% left_join(df3, by = "variable") # 用gt构建表格并设置列标题 final_table <- combined_df %>% gt() %>% cols_label( label = "变量特征", stat_0 = table_one$header$label[1], stat_1 = table_one$header$label[2], p.value = "P值(表1)", stat_0_2 = table_two$header$label[1], stat_1_2 = table_two$header$label[2], p.value_2 = "P值(表2)", stat_0_3 = table_three$header$label[1], stat_1_3 = table_three$header$label[2], p.value_3 = "P值(表3)" ) %>% cols_hide(variable) %>% tab_style(style = cell_text(weight = "bold"), locations = cells_column_labels())
内容的提问来源于stack exchange,提问作者Clara Theresa
相关产品推荐
相关产品推荐

