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

如何在gtsummary的tbl_summary中仅展示分类数据的Top10高频条目?

问题

我想在gtsummary的tbl_summary()中仅展示分类数据的Top10高频条目。目前我用forcats、dplyr等包写了代码,能在控制台生成包含Top10生物名称、频率及占比的表格,但希望把它转成gtsummary格式的表格(和报告其他部分样式统一),却不知道怎么限制只显示10种最常见的生物。

示例数据集生成代码:

library(AMR)
df <- data.table::as.data.table(example_isolates)
df$name <- mo_name(df$mo)

当前实现代码:

library(forcats)
library(dplyr)
library(magrittr)

table <- fct_count(df$name, sort = T, prop = T)%>%
  slice_head(n = 10)
table$p <- round(table$p, digits = 3)
table$p <- table$p * 100
table %<>% rename(Organism = f,`%` = p)
table
解决方案

有两种方式可以实现需求,适配不同的展示场景:

方式1:保留Top10+合并低频为「其他」(推荐)

先把分类变量处理成仅保留前10个高频类别,剩余低频类别统一归为「其他」,再用tbl_summary()生成格式统一的表格,既完整展示数据分布,又符合报告样式要求。

library(gtsummary)
library(forcats)
library(dplyr)

# 预处理:保留Top10高频类别,其余归为"其他"并按频率排序
df_processed <- df %>%
  mutate(name = fct_lump_n(name, n = 10, other_level = "其他")) %>%
  mutate(name = fct_infreq(name))

# 生成gtsummary表格
tbl_summary(df_processed, 
            include = name, 
            statistic = list(name = "{n} ({p}%)"),
            label = list(name = "微生物名称")) %>%
  modify_header(label = "**类别**") %>%
  bold_labels()

方式2:仅展示纯Top10条目

如果不需要保留低频数据,可先筛选出Top10类别对应的行,再生成表格:

library(gtsummary)
library(dplyr)

# 提取Top10类别名称
top10_names <- df %>%
  count(name, sort = TRUE) %>%
  slice_head(n = 10) %>%
  pull(name)

# 过滤数据集并按频率排序
df_top10 <- df %>%
  filter(name %in% top10_names) %>%
  mutate(name = fct_infreq(name))

# 生成gtsummary表格
tbl_summary(df_top10, 
            include = name, 
            statistic = list(name = "{n} ({p}%)"),
            label = list(name = "微生物名称")) %>%
  modify_header(label = "**类别**") %>%
  bold_labels()

代码说明

  • fct_lump_n():快速合并低频类别,n=10指定保留的高频类别数量,other_level自定义合并后的类别名称
  • fct_infreq():让类别按出现频率从高到低排序,保证Top10的展示顺序符合预期
  • tbl_summary()的statistic参数自定义展示的统计量(频率+占比),modify_header()和bold_labels()用于优化表格样式,和报告其他部分统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:47:08