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

如何在dplyr中简洁地将函数向量输出分配给多列?

解决多长度向量输出的分组多列分配问题

直接用dplyr结合tidyr的组合操作就能搞定,完全不用手动加key再转宽格式,还能自动适配任意长度的函数输出:

基础示例(以range()为例)

拿mtcars数据集按cyl分组计算油耗的最小最大值,代码如下:

library(dplyr)
library(tidyr)

mtcars %>%
  group_by(cyl) %>%
  # 把每个组的range结果存为列表列
  summarize(mpg_range = list(range(mpg))) %>%
  # 自动把列表列拆成多列,列名默认用原列名+下划线+索引
  unnest_wider(mpg_range)

运行后会自动生成mpg_range_1(对应最小值)和mpg_range_2(对应最大值)两列,要是想自定义列名,给unnest_wider加个names参数就行:

mtcars %>%
  group_by(cyl) %>%
  summarize(mpg_range = list(range(mpg))) %>%
  unnest_wider(mpg_range, names = c("min_mpg", "max_mpg"))

适配任意长度的输出

如果你的函数返回长度为3的向量(比如同时返回均值、最小值、最大值),这个方法同样适用:

# 自定义返回3个值的函数
triple_stats <- function(x) c(mean(x), min(x), max(x))

mtcars %>%
  group_by(cyl) %>%
  summarize(stats = list(triple_stats(mpg))) %>%
  # 自定义列名对应3个输出值
  unnest_wider(stats, names = c("mean_mpg", "min_mpg", "max_mpg"))

不管函数返回的向量是2个、3个还是更多元素,unnest_wider都会自动生成对应数量的列,完全不用手动调整重塑逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 09:41:12