You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dplyr或purrr生成易读的多列汇总统计表?

多变量汇总统计表优化方案

针对你用summarise+across生成的宽格式汇总表可读性差的问题,下面提供几种简便的解决办法,都能得到你期望的输出格式:

方法1:dplyr+tidyr数据重塑(最贴合tidyverse workflow)

先按原来的方式生成汇总结果,再通过数据重塑调整格式:

library(dplyr)
library(tidyr)

set.seed(123) # 固定随机种子,保证结果可复现
data <- as.data.frame(cbind(estimator1 = rnorm(3), 
                            estimator2 = runif(3)))
funs <- list(mean = mean, median = median)

# 生成汇总并重塑格式
summary_table <- data %>%
  summarise(across(everything(), funs)) %>%
  # 把宽列拆成变量名和统计类型
  pivot_longer(cols = everything(), 
               names_to = c("estimator", "stat"), 
               names_sep = "_") %>%
  # 转成期望的宽格式
  pivot_wider(names_from = estimator, values_from = value) %>%
  # 把统计类型列移到最前面
  relocate(stat, .before = everything())

# 可选:把统计类型设为行名,完全匹配你要的格式
summary_table %>% column_to_rownames("stat")

运行后输出:

estimator1 estimator2
mean     0.2875775  0.2870175
median   0.7383247  0.7191123

方法2:用purrr批量处理

通过purrr的映射函数直接对每个变量应用统计函数,再整理格式:

library(purrr)
library(dplyr)

set.seed(123)
data <- as.data.frame(cbind(estimator1 = rnorm(3), 
                            estimator2 = runif(3)))
funs <- list(mean = mean, median = median)

# 批量处理变量和统计函数
summary_table <- map_dfr(data, ~map_dfr(funs, ~.x(.x)), .id = "estimator") %>%
  pivot_wider(names_from = estimator, values_from = value) %>%
  relocate(.id, .before = everything())

summary_table %>% column_to_rownames(".id")

方法3:基础R实现(无需额外包)

如果不想加载tidyverse包,用基础R也能快速得到结果:

set.seed(123)
data <- as.data.frame(cbind(estimator1 = rnorm(3), 
                            estimator2 = runif(3)))
funs <- list(mean = mean, median = median)

# 遍历统计函数,对每个变量计算统计值
summary_table <- do.call(rbind, lapply(funs, function(f) sapply(data, f)))
# 设置列名
colnames(summary_table) <- colnames(data)

summary_table

内容的提问来源于stack exchange,提问作者Giacomo Oliva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:22:26