R语言如何将data.frame的summary结果转换为data.frame格式
问题:将data.frame的summary结果转换为指定格式的data.frame
请问在R中如何将对data.frame执行summary得到的结果本身转换为data.frame格式?需要在RMarkdown中将该结果传给knitr::kable输出,因此要求输出格式为data.frame。
示例数据
d <- data.frame(a=c(1,2,3), b=c(4,5,6)) ds <- summary(d) class(ds) # 返回 "table"
预期输出的data.frame以Min.、1st Qu.、Median等统计项为行名,以原data.frame的列名a、b为列名,单元格存储对应的统计数值。
解决方案
方法1:基础R实现(无需安装第三方包)
直接对summary返回的table对象做格式清洗后重构:
# 转换逻辑 ds_df <- as.data.frame( matrix( # 提取每个单元格的数值 as.numeric(sub(".*:", "", ds)), nrow = nrow(ds), # 设定行名(统计指标)和列名(原数据框列名) dimnames = list(trimws(sub(":.*", "", ds[,1])), colnames(ds)) ) )
生成的ds_df可直接传入knitr::kable()使用,完全符合预期格式要求。
方法2:tidyverse风格实现(适配tidy分析流程)
直接通过统计汇总生成目标格式,无需处理summary的返回结果,逻辑更清晰:
library(dplyr) ds_df <- d %>% # 对所有列计算summary包含的6项统计值 summarise(across(everything(), list( Min. = min, `1st Qu.` = ~quantile(., 0.25), Median = median, Mean = mean, `3rd Qu.` = ~quantile(., 0.75), Max. = max ))) %>% t() %>% as.data.frame() %>% setNames(colnames(d)) # 将统计指标设为行名 rownames(ds_df) <- unique(sub(".*_", "", rownames(ds_df)))
内容的提问来源于stack exchange,提问作者robertspierre
相关产品推荐
相关产品推荐

