如何生成可发表级别的分组描述统计HTML表格?
解决方案
下面提供三种实用方法,帮你生成符合期刊格式的分组描述统计表格并导出为HTML:
方法一:用gtsummary包(推荐,快速生成专业表格)
gtsummary包专门用于生成发表级统计表格,支持分组描述,导出HTML也很方便:
# 加载所需包 library(gtsummary) library(mtcars) # 将am变量转为因子(方便显示分组名称) mtcars$am <- factor(mtcars$am, levels = c(0,1), labels = c("自动档", "手动档")) # 生成分组描述统计表格 tbl <- mtcars %>% select(mpg, hp, wt, qsec, am) %>% # 指定要分析的变量和分组变量 tbl_summary( by = am, # 按am分组 statistic = list( all_continuous() ~ "{mean} ± {sd} ({median})" # 定义连续变量的统计量格式,可按需调整 ), label = list( mpg ~ "Miles/(US) gallon", hp ~ "Gross horsepower", wt ~ "Weight (1000 lbs)", qsec ~ "1/4 mile time" ) # 设置变量的显示名称 ) %>% add_n() # 添加每组样本量 # 导出为HTML文件 tbl %>% as_gt() %>% gt::gtsave("分组描述统计.html")
方法二:手动整理psych::describeBy结果,再用stargazer输出
如果坚持用stargazer,可以先把describeBy的结果整理成适合stargazer的格式:
library(psych) library(stargazer) library(mtcars) # 按am分组计算描述统计 desc_result <- describeBy(mtcars[, c("mpg", "hp", "wt", "qsec")], group = mtcars$am, mat = TRUE) # 提取需要的统计量(这里取n、均值、标准差、中位数) stats_table <- data.frame( Variable = rep(c("Miles/(US) gallon", "Gross horsepower", "Weight (1000 lbs)", "1/4 mile time"), 2), Group = rep(c("自动档", "手动档"), each = 4), N = desc_result$n, Mean = round(desc_result$mean, 2), SD = round(desc_result$sd, 2), Median = round(desc_result$median, 2) ) # 转换为宽格式(适合stargazer输出) wide_table <- reshape(stats_table, idvar = "Variable", timevar = "Group", direction = "wide") colnames(wide_table) <- gsub("\\.", " ", colnames(wide_table)) # 用stargazer生成HTML表格 stargazer(wide_table, type = "html", out = "分组描述统计_stargazer.html", title = "自动档与手动档车辆的描述统计", align = TRUE, digits = 2)
方法三:使用tableone包
tableone是医学/统计领域常用的发表级表格生成工具:
library(tableone) library(mtcars) # 转换am为因子 mtcars$am <- factor(mtcars$am, levels = c(0,1), labels = c("自动档", "手动档")) # 指定变量列表 vars <- c("mpg", "hp", "wt", "qsec") # 设置变量标签 varLabels <- list( mpg = "Miles/(US) gallon", hp = "Gross horsepower", wt = "Weight (1000 lbs)", qsec = "1/4 mile time" ) # 创建TableOne对象 tab1 <- CreateTableOne(vars = vars, strata = "am", data = mtcars, varLabels = varLabels) # 导出为HTML print(tab1, quote = FALSE, noSpaces = TRUE, printToggle = FALSE) %>% writeLines("分组描述统计_tableone.html")
内容的提问来源于stack exchange,提问作者KSM
相关产品推荐
相关产品推荐

