You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 19:54:52