我使用@daniel-d-sjoberg的gtsummary包在R中创建了一个带有tbl_cross函数的交叉表,我试图弄清楚如何使用gtsummary指定输出列宽,以便修改表中第一列的宽度。我想利用gtsummary的格式设置选项,比如加粗和将表格标题分成两行(通过在modify_caption语句中指定“\n”)。问题是,我似乎无法将标题拆分为多行并指定列宽。我的出发点是使用以下代码,它将标题正确地拆分为两行:
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"
) %>%
modify_caption("This is line 1 \n This is lin 2")
这将输出下表:
查看完文档后,我发现修改列宽的唯一方法是使用gtsummary的as_flex_table将表格转换为flextable,然后指定列宽。因此,为了做到这一点,我修改了上面的代码,通过添加两行代码将第一列的宽度更改为3英寸,如下面修改后的代码中的注解所示:
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"
) %>%
modify_caption("This is line 1 \n This is lin 2") %>%
as_flex_table() %>% #NEW CODE LINE 1
width(., 1, 3) #NEW CODE LINE 2
mytable
这段代码生成下面的输出,它现在错误地将表标题的第1行和第2行放在了一行上。
是否有一种方法(最好是在gtsummary中使用tbl_cross或其选项)可以指定列宽并将表标题分隔为多行?
3条答案
按热度按时间jtoj6r0c1#
我们可以使用
flextable
中的set_caption
jgwigjjp2#
在@akrun和@daniel-d-sjoberg提供了有用的建议后,我能够使用以下代码获得一个工作版本,并以四进制输出到Word:
library(gtsummary)
library(tidyverse)
library(flextable)
#| echo: false
mytemptable<-iris %>%
mutate(Long.Petal = ifelse(Petal.Width > .2, "Yes", "No")) %>%
tbl_cross(
row = Long.Petal,
col = Species,
percent = "cell"
) %>%
modify_caption("First Line of the Caption \n Second Line with the total sample size is {N}")
mytemptable %>%
as_flex_table() %>%
set_caption(
as_paragraph(
as_chunk(mytemptable$table_styling$caption[1], props = fp_text_default(font.family = "Cambria"))
), word_stylename = "Table Caption")
eivnm1vs3#
感谢@DanielD.Sjoberg的提示,现在我们可以这样做了。我们首先**必须使用
as_gt()
**将gt_summary tbl传输到gt对象(不仅gt()
-〉这是行不通的),然后我们可以使用cols_width()
函数:选择正确色谱柱的另一个重要因素是:摘自@DanielD.Sjoberg上述评论:
label
。您可以看到所有底层列名都带有show_header_names()
。有许多隐藏列,因此我们可以通过索引号引用该列。请参见此处https://gt.rstudio.com/reference/cols_width.html