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

R语言Tidy风格下按分组获取summary输出并整理为tibble的实现方法

实现方案

标准tidyverse流程实现

直接搭配dplyr分组 + tidyr展开的组合,完全复用base R自带的summary逻辑,不需要手动编写逐指标的计算语句:

library(dplyr)
library(tidyr)

data <- tibble(
  year = rep(2018:2021, 3),
  x = runif(length(year))
)

data %>%
  group_by(year) %>%
  reframe(stat = summary(x) %>% round(2)) %>%
  unnest_wider(stat)

核心优势

  • 不需要逐行书写min(x)、quantile(x, 0.25)这类统计计算逻辑,完全复用base R summary的计算规则和默认输出列名
  • 不需要硬编码分组值(比如之前代码里手动指定的2018:2021),分组列完全从原数据自动提取,后续数据更新、年份范围变化时代码不需要修改
  • 流程符合tidy数据处理的常规逻辑,没有零散的tapply、map拼接操作,可读性和可维护性更高

无tidyr依赖的极简写法

如果不想额外引入tidyr包,可以用purrr搭配dplyr实现同等效果,代码长度比之前的取巧实现缩短近一半:

library(purrr)
library(dplyr)

data %>%
  group_split(year) %>%
  map_dfr(~{
    stats_vec <- summary(.x$x) %>% round(2)
    as_tibble_row(as.list(stats_vec)) %>% 
      add_column(year = unique(.x$year), .before = 1)
  })

旧版dplyr兼容调整

如果使用的dplyr版本低于1.1.0,没有reframe函数,把第一段代码里的reframe替换为summarise,加上分组丢弃参数即可正常运行:

data %>%
  group_by(year) %>%
  summarise(stat = summary(x) %>% round(2), .groups = "drop") %>%
  unnest_wider(stat)

两种实现的输出结构和期望的tibble完全一致,列名自动匹配summary的默认输出,不需要手动调整。

内容的提问来源于stack exchange,提问作者Fr.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 15:45:03