如何在R Markdown中生成美观的PDF格式汇总统计表格?
R Markdown生成PDF美观汇总统计表格解决方案
你尝试用as.data.frame(lapply(df, summary))生成汇总统计表格时出现Error in dimnames(x) <- dnx : 'dimnames' applied to non-array错误,原因是summary()对不同类型变量(数值型、因子型)返回的结果结构不一致,导致无法直接转成数据框。以下是几种可行的解决方法,能生成统计量为行名、变量为列名的转置表格,适配R Markdown的PDF输出:
基础R修正方案
先统一每个变量的summary结果格式,再合并转置:
# 示例数据 df <- data.frame( 数值变量 = rnorm(100), 分类变量 = factor(sample(c("A", "B", "C"), 100, replace = TRUE)) ) # 统一处理每个变量的summary结果 summary_list <- lapply(df, function(x) { s <- summary(x) names(s) <- gsub(":", "", names(s)) # 清理因子变量的统计量名称 as.data.frame(t(s)) }) # 合并并转置得到目标格式 汇总表 <- t(do.call(rbind, summary_list))
更简便的第三方包方案
1. skimr包(推荐,美观适配PDF)
skimr专门用于生成标准化的汇总统计表格,直接在R Markdown中输出即可适配PDF格式:
library(skimr) # 生成完整汇总表 skim(df) # 自定义只保留均值、标准差 skim_with(numeric = list(均值 = mean, 标准差 = sd)) 自定义汇总表 <- skim(df) %>% select(skim_variable, 均值, 标准差) %>% t()
2. psych包
用psych::describe生成常用统计量,转置后符合需求:
library(psych) 统计结果 <- describe(df) # 提取均值、标准差并转置 目标表格 <- t(统计结果[, c("mean", "sd")]) colnames(目标表格) <- colnames(df) # 重命名列名为变量名 rownames(目标表格) <- c("均值", "标准差")
R Markdown中输出美观PDF表格
得到统计表格后,用knitr和kableExtra生成适配PDF的美观表格:
library(knitr) library(kableExtra) kable(目标表格, caption = "变量汇总统计", align = "c") %>% kable_styling(latex_options = c("striped", "hold_position"))
内容的提问来源于stack exchange,提问作者Gaspar
相关产品推荐
相关产品推荐

