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

如何对分组tibble应用返回data.frame的函数且不使用for循环

问题原因

  1. pmap_dfr为行级迭代函数,会逐行提取列值传入自定义函数,无法识别dplyr的分组设置按组批量传入数据,不符合按组处理的需求
  2. 你代码中使用的.keep参数不属于pmap_dfr的合法参数,也无法实现保留分组列的效果

正确实现方案

推荐使用dplyr提供的group_modify()函数,专门用于分组数据按组应用返回数据框的自定义函数,实现代码如下:

library(dplyr)

# 固定随机种子方便结果复现
set.seed(123)
df <- data.frame(start=1:10,end=21:30,g=sample(LETTERS[1:2],10,replace=TRUE))

ff <- function(start,end,... ) {
  out <- data.frame(T1=c(start,rev(start)),T2=c(end,rev(end)))
  return(out)
}

# 分组计算+保留分组列+调整列名匹配预期输出
result <- df %>%
  group_by(g) %>%
  group_modify(~ ff(start = .x$start, end = .x$end)) %>%
  rename(start = T1, end = T2) %>%
  ungroup()

如果偏好使用purrr系列函数实现,可以先对分组数据做嵌套再迭代:

library(dplyr)
library(purrr)
library(tidyr)

result <- df %>%
  nest(.by = g) %>%
  mutate(res = map(data, ~ ff(.x$start, .x$end))) %>%
  unnest(res) %>%
  select(g, start = T1, end = T2)

说明

两种方案都支持自定义函数调用原数据的任意列:

  • 使用group_modify时,.x代表当前分组的所有数据,直接通过.x$列名调用即可
  • 使用嵌套方案时,自定义函数可以从嵌套后的分组数据框中提取任意需要的字段

内容的提问来源于stack exchange,提问作者Fredrik Nylén

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:06:04