如何将gtsummary中add_n()生成的n列数值取整至0或5?
解决gtsummary中add_n()生成的n列取整问题
你遇到的问题是tbl_summary()的digits参数无法作用于add_n()添加的样本量列,这是因为digits仅控制初始统计表格中的统计量格式,而add_n()是后续追加的新列,不受该参数影响。以下是两种可行的解决方案:
方法1:直接修改表格底层数据
通过modify_table_body()直接修改n列的数值,将其替换为取整后的结果:
library(tidyverse) library(gtsummary) # 定义向上取整到最近5的倍数的函数 round_05 <- function(x) { ceiling(x/5) * 5 } df %>% tbl_summary( by = hba1c, include = -id ) %>% add_p(pvalue_fun = ~ style_pvalue(.x, digits = 2)) %>% add_overall() %>% add_n() %>% # 修改所有n列的数值 modify_table_body( ~ .x %>% mutate( across( all_of(c("n_overall", starts_with("n_"))), ~ round_05(as.numeric(.x)) ) ) )
方法2:设置列的格式化函数
通过modify_fmt_fun()指定n列的显示格式,仅修改展示结果,不改动底层数据:
df %>% tbl_summary( by = hba1c, include = -id ) %>% add_p(pvalue_fun = ~ style_pvalue(.x, digits = 2)) %>% add_overall() %>% add_n() %>% # 为n列设置取整格式化函数 modify_fmt_fun( columns = all_of(c("n_overall", starts_with("n_"))), fmt_fun = ~ round_05(as.numeric(.x)) %>% as.character() )
关键说明
n_overall是add_overall()生成的总样本量列,starts_with("n_")匹配所有分组的样本量列(比如n_hba1c_0、n_hba1c_1)- 两种方法都需要将列值转为数值型后再应用
round_05,因为gtsummary表格中的列默认是字符型
内容的提问来源于stack exchange,提问作者skpak
相关产品推荐
相关产品推荐

