如何用R的gt包将两个表格横向并排并添加统一标题?
解决方案
要在gt中实现两个表格横向并排并添加统一标题,你可以通过分别创建两个gt表格对象,再用cols_bind()合并,配合tab_spanner()添加分组标签,最终实现需求。以下是完整代码和说明:
步骤1:准备示例数据(模拟你的tableA和tableB)
# 模拟你的数据结构 tableA <- data.frame( effect = c("X.", "Y.", "Z."), f_value = c(1, 2, 9), formatted_p_value = c(0.5, 0.03, 0.001) ) tableB <- data.frame( effect = c("X.", "Y.", "Z."), f_value = c(3, 4, 10), formatted_p_value = c(0.05, 0.01, 0.001) )
步骤2:分别创建两个gt表格
先为两个表格设置相同的格式(和你原代码的格式保持一致):
library(gt) gt_A <- tableA %>% gt() %>% fmt_number( columns = everything(), decimals = 3 ) %>% cols_label( effect = md("**Effect**"), f_value = md("**F Value**"), formatted_p_value = md("**P Value**") ) gt_B <- tableB %>% gt() %>% fmt_number( columns = everything(), decimals = 3 ) %>% cols_label( effect = md("**Effect**"), f_value = md("**F Value**"), formatted_p_value = md("**P Value**") )
步骤3:合并表格并添加统一标题和分组标签
用cols_bind()横向合并两个gt对象,再用tab_spanner()为两组列添加"A:"和"B:"的分组标签,最后设置统一表头:
combined_gt <- cols_bind(gt_A, gt_B) %>% tab_spanner( label = md("**A:**"), columns = 1:3 # 对应tableA的列 ) %>% tab_spanner( label = md("**B:**"), columns = 4:6 # 对应tableB的列 ) %>% tab_header( title = md("**Table 2: Type 3 Fixed Effects**") ) # 输出表格 combined_gt
关键说明
cols_bind()是gt包专门用于横向合并两个gt表格的函数,需要确保两个表格的行数一致(你的场景满足这个条件)。tab_spanner()用于为多列添加分组标签,对应你需求中的"A:"和"B:"。- 格式设置(
fmt_number、cols_label)需要在合并前分别应用到两个表格,保证格式统一。
优化版:避免重复列
如果你的effect列内容完全一致,也可以优化为只保留一列effect,让表格更紧凑:
# 合并数据时去掉tableB的effect列 table_combined <- cbind(tableA, tableB[, -1]) table_combined %>% gt() %>% fmt_number( columns = everything(), decimals = 3 ) %>% cols_label( effect = md("**Effect**"), f_value = md("**A: F Value**"), formatted_p_value = md("**A: P Value**"), f_value.1 = md("**B: F Value**"), formatted_p_value.1 = md("**B: P Value**") ) %>% tab_spanner( label = md("**A:**"), columns = c(f_value, formatted_p_value) ) %>% tab_spanner( label = md("**B:**"), columns = c(f_value.1, formatted_p_value.1) ) %>% tab_header( title = md("**Table 2: Type 3 Fixed Effects**") )
内容的提问来源于stack exchange,提问作者Kelly
相关产品推荐
相关产品推荐

