医学生用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
相关产品推荐
相关产品推荐

