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

如何自定义gtsummary的{n_no5}函数,将<5的单元格计数替换为"<5"

问题描述

我希望生成tbl_summary表格时,自动隐藏计数小于5的单元格,即将统计输出中0-4的n值替换为"<5"。我尝试通过自定义类似{n}的函数实现,但编写的n_no5函数未能生效,特此咨询实现方法,同时提出该功能的需求建议。感谢gtsummary包开发者打造了这款优秀工具!

我的尝试代码

# 创建自定义汇总函数
n_no5 <- function (x) {
  # 尝试获取当前分组下变量的计数,但无效
  myct<- sum (!is.na(x))

  # 返回结果
  ifelse(myct<5, "<5", myct)
}

mydata %>% select (bygroup, variable) %>% 
tbl_summary 
  ( by="bygroup", 
    statistic=list (all_categorical ~ "{n_no5}")
  )
解决方案

你的自定义函数未生效的核心原因是:sum(!is.na(x))计算的是整个变量的非缺失值总数,而非当前分组下对应分类水平的计数。以下是两种可行的实现方式:

方法一:用modify_table_body修改生成后的表格(推荐)

先正常生成统计表格,再批量替换符合条件的单元格,操作更直观:

library(gtsummary)
library(dplyr)

# 示例数据(可替换为你的实际数据)
mydata <- tibble(
  bygroup = sample(c("A", "B"), 100, replace = TRUE),
  variable = sample(c("X", "Y", "Z"), 100, replace = TRUE, prob = c(0.02, 0.49, 0.49))
)

mydata %>% 
  select(bygroup, variable) %>% 
  tbl_summary(by = "bygroup", statistic = all_categorical() ~ "{n}") %>%
  modify_table_body(
    ~ .x %>%
      mutate(
        stat_display = case_when(
          as.numeric(stat) < 5 ~ "<5",
          TRUE ~ stat
        )
      )
  )

方法二:编写符合gtsummary规范的自定义统计函数

gtsummary的自定义统计函数需要接收分组后的数据集等参数,通过tbl_custom_summary调用:

# 自定义统计函数:处理分组后分类水平的计数替换
n_no5_fn <- function(data, variable, by, ...) {
  # 计算每个分组-分类水平的计数
  count_data <- data %>%
    group_by(across(all_of(c(by, variable)))) %>%
    summarise(n = n(), .groups = "drop") %>%
    mutate(n = ifelse(n < 5, "<5", as.character(n)))
  
  # 转换为gtsummary要求的输出格式
  count_data %>%
    pivot_wider(names_from = all_of(by), values_from = n, values_fill = "0") %>%
    mutate(statistic = paste(.data[[names(.)[2]]], .data[[names(.)[3]]], sep = ", ")) %>%
    select(variable = all_of(variable), statistic)
}

# 调用自定义函数生成表格
mydata %>% 
  select(bygroup, variable) %>% 
  tbl_custom_summary(
    by = "bygroup",
    stat_fns = list(variable ~ n_no5_fn)
  )
需求建议

建议gtsummary官方新增一个参数(例如mask_small_counts = 5),允许用户一键将小于指定阈值的计数替换为"<阈值",无需手动编写自定义函数,进一步提升表格生成的便捷性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:35:20