如何在同一Word文档中依次追加多个gt_summary表格?
问题:如何将多个gtsummary表格追加到同一Word文档?
我正在逐个创建多个gtsummary表格,想先把第一个表格保存到Word文档,再依次将后续表格追加到同一文档中,试了下面的代码却报错了。
示例代码
library(car) library(tidyverse) library(gtsummary) data(mtcars) # 创建第一个表格 table1 <- mtcars %>% gtsummary::tbl_summary(include = c(mpg,cyl,disp), missing = "no", statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"), digits = all_continuous() ~ 2, label = mpg ~ "miles per gallon" ) table1 # 将表格保存到docx文件 table1 %>% as_gt()%>% gt::gtsave("table1.docx") # 创建第二个表格 table2 <- mtcars %>% gtsummary::tbl_summary(include = c(wt,gear), missing = "no", statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"), digits = all_continuous() ~ 2 ) table2 # 尝试将第二个表格保存到同一个docx文件 table2 %>% as_gt()%>% gt::gtsave("table1.docx")
运行报错信息
Unknown output format doc Pandoc can convert to DOCX, but not to DOC. Error: pandoc document conversion failed with error 22
解决方案
核心问题说明
gt::gtsave() 不支持直接向已存在的docx文件追加内容,它只会覆盖原有文件。你看到的格式报错是pandoc的误解,但即使解决这个提示,也无法实现追加逻辑,必须通过以下两种方法实现需求:
方法一:使用officer包逐步添加表格到文档
利用officer包操作Word文档的特性,先将gtsummary表格转成flextable,再逐个添加到空文档中:
# 安装并加载所需包(首次使用需安装) install.packages(c("gtsummary", "officer", "flextable")) library(gtsummary) library(officer) library(flextable) library(tidyverse) data(mtcars) # 创建第一个表格并转成flextable table1 <- mtcars %>% tbl_summary(include = c(mpg,cyl,disp), missing = "no", statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"), digits = all_continuous() ~ 2, label = mpg ~ "miles per gallon" ) %>% as_flex_table() # 创建第二个表格并转成flextable table2 <- mtcars %>% tbl_summary(include = c(wt,gear), missing = "no", statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"), digits = all_continuous() ~ 2 ) %>% as_flex_table() # 创建空Word文档,依次添加表格(可加空行分隔) doc <- read_docx() %>% body_add_flextable(table1) %>% body_add_par("") # 添加空行分隔两个表格 %>% body_add_flextable(table2) # 保存最终文档 print(doc, target = "combined_tables.docx")
方法二:合并多个gt对象后保存
如果表格可以连续排列,无需额外格式分隔,可先用gt::gt_stack()合并多个gt对象,再一次性保存:
library(gtsummary) library(tidyverse) library(gt) data(mtcars) # 创建并转换第一个表格为gt对象 table1 <- mtcars %>% tbl_summary(include = c(mpg,cyl,disp), missing = "no", statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"), digits = all_continuous() ~ 2, label = mpg ~ "miles per gallon" ) %>% as_gt() # 创建并转换第二个表格为gt对象 table2 <- mtcars %>% tbl_summary(include = c(wt,gear), missing = "no", statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)"), digits = all_continuous() ~ 2 ) %>% as_gt() # 合并两个gt表格 combined_table <- gt_stack(table1, table2) # 保存合并后的表格到docx gtsave(combined_table, "combined_tables.docx")
内容的提问来源于stack exchange,提问作者user3315563
相关产品推荐
相关产品推荐

