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
相关产品推荐
相关产品推荐

