如何在R的gtsummary中设置下标并导出为.docx文件?
解决gtsummary表格下标设置并保存为.docx的问题
问题背景
制作表格并保存为Microsoft Word的.docx文件时,需要将表格中PM2.5变量的2.5设置为下标(格式如PM₂.₅)。尝试用'PM~2.5~'语法配合as_kable()实现下标效果,但保存后的.docx文件为空。
问题
如何在gtsummary中设置文本下标,并成功将表格保存为.docx文件?
可复现代码(原代码)
library(dplyr) library(gtsummary) df = data.frame(PM2.5 = 1) tab = # make a table using gtsummary df %>% tbl_summary(label = PM2.5 ~ 'PM~2.5~') %>% # 主表格中的下标写法 modify_table_styling(columns = label, rows = label == 'PM~2.5~', footnote = 'PM~2.5~ in footnote') %>% # 脚注中的下标写法 as_kable() tab %>% flextable::save_as_docx(path = 'test.docx') # 生成空白docx文件
解决方案
原代码的问题在于as_kable()生成的是纯Markdown文本,而flextable::save_as_docx()需要接收flextable对象而非文本内容,因此导致空白文件。正确做法是使用gtsummary自带的as_flex_table()转换表格,并开启flextable的Markdown语法解析功能,具体步骤如下:
修改后的代码
library(dplyr) library(gtsummary) library(flextable) # 全局开启flextable的Markdown语法解析(支持~下标、*斜体、**粗体等) set_flextable_defaults(markdown = TRUE) df = data.frame(PM2.5 = 1) tab = df %>% tbl_summary(label = PM2.5 ~ 'PM~2.5~') %>% modify_table_styling(columns = label, rows = label == 'PM~2.5~', footnote = 'PM~2.5~ in footnote') %>% as_flex_table() # 将gtsummary表格转换为flextable对象 # 保存为docx文件 save_as_docx(tab, path = 'test.docx')
关键说明
as_flex_table()是gtsummary专为flextable设计的转换函数,能完整保留表格样式并兼容flextable的格式设置;set_flextable_defaults(markdown = TRUE)会让flextable自动识别文本中的~(下标)、*(斜体)等Markdown语法;- 若不想全局开启Markdown解析,也可针对单个表格调用
tab <- parse_chunk(tab)来单独解析语法。
内容的提问来源于stack exchange,提问作者zhiwei li
相关产品推荐
相关产品推荐

