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

R语言purrr::map_dfr()分离列表数据框的异常问题

问题根因

purrr包中map_dfr()的设计逻辑就是自动将每次迭代返回的结果按行合并,最终输出单个数据框,和你需要保留两类聚合结果、最终返回两元素数据框列表的需求不匹配,这就是运行结果不符合预期的核心原因。而且你原本先合并再拆分的逻辑会生成大量冗余NA值,还要额外做过滤、删列操作,效率更低。

修正方案

直接对迭代返回的嵌套列表做转置分组,再分别做行绑定即可,不需要先拼大表再拆分:

library(tidyverse)

dat_list <- list(as_tibble(mtcars),as_tibble(mtcars),as_tibble(mtcars))


test_func <- function(x) {
  dat <- x
  
  gear_avg <- dat %>% 
    group_by(gear) %>% 
    summarize(value=mean(mpg))
  
  carb_avg <- dat %>% 
    group_by(carb) %>% 
    summarize(value=mean(mpg))
  
  # 给两类聚合结果命名,方便后续分组处理
  df_list <- list(
    gear_res = as_tibble(gear_avg),
    carb_res = as_tibble(carb_avg)
  )
  return(df_list)
}

# 迭代处理后转置嵌套列表,同类型聚合结果分组后按行绑定
final_output <- dat_list %>% 
  map(test_func) %>% 
  transpose() %>% 
  map(bind_rows)

运行后final_output就是你需要的长度为2的数据框列表:

  • 第一个元素是所有输入数据按gear分组计算的mpg均值聚合结果
  • 第二个元素是所有输入数据按carb分组计算的mpg均值聚合结果
    输出结构、内容和你代码中定义的desired_output完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:33:17