如何在R的gtsummary包tbl_cross中同时设置列宽与多行标题
解决方案:同时实现gtsummary交叉表的标题换行与列宽设置
问题背景
使用gtsummary包的tbl_cross()创建交叉表时,需要同时达成两个需求:
- 自定义列宽(重点调整第一列)
- 标题多行显示(通过换行实现)
但将gtsummary对象转为flextable设置列宽后,原有的标题换行效果会失效。
可行解决方法
方法1:转为flextable后重新配置标题与列宽
当转为flextable对象后,原gtsummary的caption格式会被重置,因此需要在转成flextable后,用flextable的set_caption()重新设置带换行的标题,同时搭配width()调整列宽。
library(tidyverse) library(flextable) library(gtsummary) mytable <- iris %>% mutate(Long.Petal = ifelse(Petal.Width > .2, "Yes", "No")) %>% tbl_cross( row = Long.Petal, col = Species, percent = "cell" ) %>% as_flex_table() %>% width(1, 3) %>% # 第一列宽度设为3英寸,单位可按需调整 set_caption(caption = "This is line 1\nThis is line 2") # 用\n实现标题换行 mytable
方法2:直接在gtsummary中设置列宽(无需转flextable)
gtsummary原生支持通过modify_table_styling()调整列宽,无需转为flextable,这样能保留modify_caption()设置的标题换行效果。
library(tidyverse) library(gtsummary) mytable <- iris %>% mutate(Long.Petal = ifelse(Petal.Width > .2, "Yes", "No")) %>% tbl_cross( row = Long.Petal, col = Species, percent = "cell" ) %>% modify_caption("This is line 1 \n This is line 2") %>% modify_table_styling( columns = 1, width = "3cm" # 设置第一列宽度为3厘米,支持cm/in等单位 ) mytable
内容的提问来源于stack exchange,提问作者StatsStudent
相关产品推荐
相关产品推荐

