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

如何在gtsummary::tbl_summary中设置missing_stat的数字格式

解决gtsummary::tbl_summary缺失值百分比保留两位小数的问题

要让{p_miss}显示两位小数(比如0.01666显示为1.67%),可以用以下两种方法实现:

方法一:直接在missing_stat中格式化p_miss

修改missing_stat参数,用gtsummary::style_number()对p_miss进行格式化,指定保留两位小数:

data <- data.frame(
  group = c(rep("A", 50), rep("B", 9), rep(NA, 1)),
  height = c(rnorm(30, mean = 160, sd = 5), rnorm(30, mean = 170, sd = 6)),
  gender = c(rep("Male", 25), rep("Female", 34), rep(NA, 1))  
)

tableT <- data %>%
  gtsummary::tbl_summary(
    type = list(all_continuous() ~ "continuous2",
                all_dichotomous() ~ "categorical"),
    statistic = list(all_continuous2() ~ "{mean} ({sd})",
                     all_categorical() ~"{n} ({p}%)"),
    missing = "always",
    missing_text = "Missing",
    # 用style_number格式化p_miss,先转成百分比数值再保留两位小数
    missing_stat = "{N_miss}/{N_obs} ({style_number(p_miss*100, digits = 2)})%",
    digits = list(all_categorical() ~ c(0, 2),
                  all_continuous2() ~ c(2,2)),
    include = everything()
  )

这里需要把p_miss乘以100,因为它本身是比例值(0.01666),转成百分比数值(1.666)后再格式化,才能得到1.67%的结果。

方法二:用modify_fmt_fun针对缺失值统计项设置格式

如果不想修改missing_stat的写法,可以在生成表格后,定位到缺失值行统一调整格式:

data <- data.frame(
  group = c(rep("A", 50), rep("B", 9), rep(NA, 1)),
  height = c(rnorm(30, mean = 160, sd = 5), rnorm(30, mean = 170, sd = 6)),
  gender = c(rep("Male", 25), rep("Female", 34), rep(NA, 1))  
)

tableT <- data %>%
  gtsummary::tbl_summary(
    type = list(all_continuous() ~ "continuous2",
                all_dichotomous() ~ "categorical"),
    statistic = list(all_continuous2() ~ "{mean} ({sd})",
                     all_categorical() ~"{n} ({p}%)"),
    missing = "always",
    missing_text = "Missing",
    missing_stat = "{N_miss}/{N_obs} ({p_miss}%)",
    digits = list(all_categorical() ~ c(0, 2),
                  all_continuous2() ~ c(2,2)),
    include = everything()
  ) %>%
  # 定位到标记为"Missing"的行,设置统计值保留两位小数
  modify_fmt_fun(
    rows = label == "Missing",
    statistic = ~ style_number(.x, digits = 2)
  )

注意事项

  • 你之前尝试的digits参数写法有误,digits是针对变量的统计量设置小数位数,无法直接指定p_miss;
  • 第一种方法更直接,第二种方法适合需要批量调整缺失行格式的场景。

内容的提问来源于stack exchange,提问作者Susan M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:03:09