如何避免tbl_summary转flextable存Word时变量标签与水平间行距过大
解决tbl_summary转flextable后分类变量行间距过大的问题
问题原因
你当前代码里的line_spacing(i = 1, space = 0.5, part = "body")只给表格第一行(Age行)设置了行距,分类变量的标签行(Sex、Educational attainment)和它们的因子水平行(Female/Male、Primary/Secondary/Higher)都没应用这个设置,导致默认行距和你指定的第一行不一致,看起来间距过大。另外你脚注里的统计类型描述写反了,也顺便修正。
修复后的代码
id <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20) sex <- factor(c("Male","Female","Female","Male","Female","Male","Female","Female","Female","Female","Male","Female","Female","Male","Male","Male","Female","Female","Female","Female")) age <- c(21,25,32,24,63,52,75,24,65,95,58,36,46,58,65,19,47,48,33,54) education <- factor(c("Primary","Secondary","Secondary","Higher","Secondary","Primary","Higher","Secondary","Secondary","Higher","Secondary","Secondary","Higher","Secondary","Secondary","Primary","Secondary","Higher","Secondary","Secondary")) df1 <- data.frame(id,sex,age,education) table <- df1 %>% select(-id) %>% tbl_summary( statistic = list( all_continuous() ~ "{mean} ({sd})", all_categorical() ~ "{n} ({p}%)" ), label = list( sex ~ "Sex", age ~ "Age (years)", education ~ "Educational attainment" ) ) %>% modify_footnote( # 修正脚注的统计类型描述,之前写反了 all_stat_cols() ~ "Statistics presented: \nMean (SD) for continuous variables; \nn (%) for categorical variables" ) %>% as_flex_table() %>% fontsize(size = 8, part = "all") %>% # 移除i=1,让行距设置应用到body所有行 line_spacing(space = 0.5, part = "body") %>% # 可选:调整单元格上下内边距,进一步消除多余空白 padding(padding = 1, part = "body") table save_as_docx( "Table: Descriptive statistics" = table, path = "Table.docx" )
关键改动说明
- 去掉
line_spacing里的i=1参数,让space=0.5的行距规则应用到表格body的所有行,包括分类变量的标签行和因子水平行,保证全行间距统一。 - 新增
padding(padding=1, part="body"):调整单元格的上下内边距,避免行与行之间出现额外空白(如果还有间距可以微调数值,比如0或2)。 - 修正脚注里的统计类型对应关系,确保描述准确。
内容的提问来源于stack exchange,提问作者marc.th
相关产品推荐
相关产品推荐

