如何将多个gtsummary交叉表输出至同一个Word文档
多gtsummary交叉表批量导出到同一Word文档解决方案
报错原因
你使用lapply()得到的是包含多个gtsummary tbl_cross对象的列表,而as_flex_table()仅支持处理单个gtsummary对象,无法直接识别列表输入,因此触发报错。
解决方案
方案1:多个表格独立分页存入同一Word(常用场景)
直接将列表内的所有gtsummary对象批量转为flextable,再传入save_as_docx()即可,每个表格默认自动分页:
library(flextable) # 批量生成所有交叉表 tbl_list <- lapply(c('Q17_1','Q17_2','Q17_3'), run_xtab) # 将列表中每个gtsummary对象转为flextable格式 flex_list <- lapply(tbl_list, as_flex_table) # 批量导出到同一Word save_as_docx( values = flex_list, path = paste0(dir_project_foll, "Output/", "cross_tabs.docx") # 注意Output路径后需加斜杠,避免路径拼接错误 )
方案2:所有交叉表堆叠为单个大表导出
如果需要将所有交叉表合并为一个连续的大表,可以使用gtsummary自带的tbl_stack()函数先堆叠再导出:
library(flextable) # 批量生成表格后堆叠为单个gtsummary对象 stacked_tbl <- lapply(c('Q17_1','Q17_2','Q17_3'), run_xtab) %>% tbl_stack() # 导出堆叠后的大表 stacked_tbl %>% as_flex_table() %>% save_as_docx(path = paste0(dir_project_foll, "Output/", "stacked_cross_tabs.docx"))
自定义函数优化建议
你当前run_xtab()函数中的label参数设置有误,生成的表格行标签会固定显示为v1而非实际的变量名,可修改为如下写法实现动态匹配变量名:
run_xtab <- function(v1) { out <- dat %>% tbl_cross( !!rlang::sym(v1), col = survey, percent = 'column', label = list(!!rlang::sym(v1) ~ v1), # 此处修改为动态注入变量名 missing_text = "missing" ) %>% add_p(source_note = TRUE) %>% bold_labels() return(out) }
内容的提问来源于stack exchange,提问作者NewBee
相关产品推荐
相关产品推荐

