如何从包含lsmeans()统计结果的列表元素生成规范表格
你可以通过遍历lsmeans结果列表,提取每个元素的均值和组间对比结果后,用gt或flextable包生成规范的学术表格,支持批量导出,具体实现步骤如下:
步骤1:加载依赖包
library(tidyverse) library(lmerTest) library(emmeans) library(gt) # 用于生成美观表格
注意:原lsmeans包已整合进emmeans包,功能完全兼容,旧版lsmeans包已停止维护
步骤2:遍历生成整合表格
以下代码会为每个通道生成同时包含调整后均值和组间对比结果的表格,默认保留Kenward-Roger自由度、Tukey校正p值等信息:
# 遍历13个通道的统计结果 channel_tables <- imap(md, function(stat_res, channel_id) { # 提取调整后均值结果 lsmeans_tbl <- as.data.frame(stat_res$lsmeans) %>% select(GROUP, lsmean, SE, df, lower.CL, upper.CL) # 提取组间对比结果 contrast_tbl <- as.data.frame(stat_res$contrasts) %>% select(contrast, estimate, SE, df, t.ratio, p.value) # 生成整合表格 gt() %>% tab_header(title = paste("通道", channel_id, "统计结果")) %>% # 插入均值部分 tab_section( heading = "校正后均值(95%置信区间)", body = gt(lsmeans_tbl) %>% fmt_number(columns = where(is.numeric), decimals = 3) %>% cols_label( GROUP = "分组", lsmean = "调整后均值", SE = "标准误", df = "自由度", lower.CL = "95%CI下限", upper.CL = "95%CI上限" ) ) %>% # 插入对比部分 tab_section( heading = "组间 pairwise 对比(Tukey校正)", body = gt(contrast_tbl) %>% fmt_number(columns = c(estimate, SE, df, t.ratio), decimals = 3) %>% fmt_pvalue(columns = p.value, decimals = 4) %>% cols_label( contrast = "对比组", estimate = "组间差值", SE = "标准误", df = "自由度", t.ratio = "t值", p.value = "校正后p值" ) ) %>% # 统一表格样式 tab_options( table.width = pct(100), heading.background.color = "#f0f0f0", column_labels.font.weight = "bold" ) })
步骤3:批量导出表格
生成的所有表格存在channel_tables列表中,可按需导出为不同格式:
- 导出为单张HTML:
gtsave(channel_tables[[1]], "通道1结果.html") - 批量导出所有通道结果为独立HTML:
walk2(channel_tables, names(md), ~ gtsave(.x, paste0("通道_", .y, "_结果.html"))) - 如需导出为Word格式,可将
gt替换为flextable包实现,逻辑完全一致。
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

