如何用R将TukeyHSD结果输出为PDF等格式的美观表格?
解决方案
方法1:用openxlsx导出Excel表格
openxlsx可直接将TukeyHSD结果整理为结构化数据框,写入Excel时还能设置表头样式,无需额外格式调整:
- 安装并加载包:
install.packages("openxlsx") library(openxlsx)
- 处理结果并导出:
# 运行示例分析 fm1 <- aov(breaks ~ wool + tension, data = warpbreaks) tukey_res <- TukeyHSD(fm1) # 将多组对比结果合并为单个数据框,添加分组标识 tukey_df <- do.call(rbind, lapply(names(tukey_res), function(x) { df <- as.data.frame(tukey_res[[x]]) df$对比分组 <- x df$组别配对 <- rownames(tukey_res[[x]]) rownames(df) <- NULL df })) # 创建工作簿,写入数据并设置表头样式 wb <- createWorkbook() addWorksheet(wb, "TukeyHSD结果") writeData(wb, "TukeyHSD结果", tukey_df, headerStyle = createStyle(textDecoration = "bold", fgFill = "#D3D3D3")) saveWorkbook(wb, "TukeyHSD_Results.xlsx", overwrite = TRUE)
方法2:用flextable导出PDF/Word表格
flextable生成的表格支持自定义样式,可直接导出为PDF或Word,无需LaTeX基础:
- 安装并加载依赖包:
install.packages(c("flextable", "officer", "magrittr")) library(flextable) library(officer) library(magrittr)
- 生成美观表格并导出:
# 运行示例分析 fm1 <- aov(breaks ~ wool + tension, data = warpbreaks) tukey_res <- TukeyHSD(fm1) # 整理结果为规范数据框 tukey_df <- do.call(rbind, lapply(names(tukey_res), function(x) { df <- as.data.frame(tukey_res[[x]]) df$对比分组 <- x df$组别配对 <- rownames(tukey_res[[x]]) df[, c("对比分组", "组别配对", "diff", "lwr", "upr", "p adj")] })) # 创建带样式的表格 ft <- flextable(tukey_df) %>% set_header_labels(对比分组 = "对比分组", 组别配对 = "组别配对", diff = "差异值", lwr = "置信区间下限", upr = "置信区间上限", `p adj` = "校正p值") %>% bold(part = "header") %>% autofit() %>% theme_box() # 导出为PDF(需安装tinytex,执行install.packages("tinytex"); tinytex::install_tinytex()完成安装) save_as_pdf(ft, path = "TukeyHSD_Results.pdf") # 导出为Word save_as_docx(ft, path = "TukeyHSD_Results.docx")
方法3:用gt包导出HTML/PDF/Excel
gt专注于生成优雅的统计表格,支持多格式导出:
- 安装并加载包:
install.packages("gt") library(gt)
- 生成表格并导出:
# 运行示例分析 fm1 <- aov(breaks ~ wool + tension, data = warpbreaks) tukey_res <- TukeyHSD(fm1) # 整理结果数据框 tukey_df <- do.call(rbind, lapply(names(tukey_res), function(x) { df <- as.data.frame(tukey_res[[x]]) df$对比分组 <- x df$组别配对 <- rownames(tukey_res[[x]]) df })) # 创建带格式的gt表格 gt_table <- gt(tukey_df) %>% tab_header(title = "TukeyHSD多重比较结果") %>% fmt_number(columns = c(diff, lwr, upr, `p adj`), decimals = 3) %>% tab_style(style = cell_text(weight = "bold"), locations = cells_column_labels()) # 导出为HTML gtsave(gt_table, "TukeyHSD_Results.html") # 导出为PDF(需tinytex) gtsave(gt_table, "TukeyHSD_Results.pdf") # 导出为Excel gtsave(gt_table, "TukeyHSD_Results.xlsx")
内容的提问来源于stack exchange,提问作者Rivered
相关产品推荐
相关产品推荐

