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

医学生用gtsummary包遇'tbl_summary'函数未找到错误求助

解决gtsummary报错&汇总表定制方案

先搞定tbl_summary找不到的问题

出现这个报错,哪怕你以为加载了包,大概率是这几个原因:

  • 包未正确安装:gtsummary依赖不少tidyverse相关包,安装时可能因网络或依赖缺失没装全。重新运行:
    install.packages("gtsummary", dependencies = TRUE)
    library(gtsummary)
    
  • 加载包时拼写错误:确认你写的是library(gtsummary),不是library(gt_summary)或其他错漏。
  • 函数名冲突:如果同时加载了其他包,可能有重名函数。直接指定包名调用即可解决:
    data %>% 
      select(age_years, gender, weight, height, pregnant, breastfeeding, income, work_intensity, religion, marital, education) %>%
      gtsummary::tbl_summary()  # 明确调用gtsummary包的函数
    

更易上手的定制汇总表方案

1. 基于gtsummary定制(适配医学研究需求)

你需要的年龄分组可以这么实现:先对年龄变量分组,再生成带分组对比的汇总表,示例如下:

data %>%
  mutate(age_group = cut(age_years, breaks = c(17, 30, 50, Inf), labels = c("18-30", "31-50", "51+"))) %>%
  select(age_group, gender, weight, height, pregnant, breastfeeding, income, work_intensity, religion, marital, education) %>%
  tbl_summary(
    by = age_group,  # 按年龄分组展示对比
    type = list(weight ~ "continuous", height ~ "continuous"),  # 指定变量类型
    statistic = list(continuous ~ "{mean} ({sd})", categorical ~ "{n} ({p}%)")  # 自定义统计量格式
  ) %>%
  add_p()  # 添加组间比较P值(医学研究常用)

2. 用tableone包(医学领域轻量化工具)

tableone是医学研究做基线表的常用包,语法更直白:

# 安装加载包
install.packages("tableone")
library(tableone)

# 定义变量列表与分类变量
vars <- c("age_years", "gender", "weight", "height", "pregnant", "breastfeeding", "income", "work_intensity", "religion", "marital", "education")
catVars <- c("gender", "pregnant", "breastfeeding", "income", "work_intensity", "religion", "marital", "education")

# 年龄分组
data$age_group <- cut(data$age_years, breaks = c(17, 30, 50, Inf), labels = c("18-30", "31-50", "51+"))

# 生成分组汇总表
tableOne <- CreateTableOne(vars = vars, factorVars = catVars, data = data, strata = "age_group")
# 输出格式化表格
print(tableOne, showAllLevels = TRUE, printToggle = FALSE)

3. dplyr+gt组合(完全自定义,灵活度最高)

如果需要极致自定义表格样式,可以用dplyr做数据汇总,再用gt包美化:

library(dplyr)
library(gt)

data %>%
  mutate(age_group = cut(age_years, breaks = c(17, 30, 50, Inf), labels = c("18-30", "31-50", "51+"))) %>%
  group_by(age_group) %>%
  summarise(
    年龄均值 = mean(age_years, na.rm = TRUE),
    年龄标准差 = sd(age_years, na.rm = TRUE),
    男性占比 = sum(gender == "男", na.rm = TRUE)/n()*100,
    体重均值 = mean(weight, na.rm = TRUE)
    # 按需添加其他变量的统计量
  ) %>%
  gt() %>%
  tab_header(title = "研究人群基线特征汇总") %>%
  fmt_number(columns = c(年龄均值, 年龄标准差, 体重均值), decimals = 1) %>%
  fmt_percent(columns = 男性占比, decimals = 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:22