从map()函数的调用中合并数据框列表

5
有没有“整洁”的方法可以连接数据框列表(类似于full_join(),但是用于>2个数据框)?我有一个数据框列表,这是调用map()的结果。我以前使用Reduce()做过类似的事情,但是想将它们合并为管道的一部分 - 只是还没有找到优雅的方法来实现。玩具示例:
library(tidyverse)

## Function to make a data.frame with an ID column and a random variable column with mean = df_mean
make.df <- function(df_mean){
  data.frame(id = 1:50,
             x = rnorm(n = 50, mean = df_mean))
}

## What I'd love:
my.dfs <- map(c(5, 10, 15), make.df) #%>%
  # <<some magical function that will full_join() on a list of data frames?>>

## Gives me the result I want, but inelegant
my.dfs.joined <- full_join(my.dfs[[1]], my.dfs[[2]], by = 'id') %>%
  full_join(my.dfs[[3]], by = 'id')

## Kind of what I want, but I want to merge, not bind
my.dfs.bound <- map(c(5, 10, 15), make.df) %>%
  bind_cols()

1
purrr::reduceReduce的包装器,参数被反转以更好地进行管道操作。 - alistaire
太棒了 - 我之前不知道有 purrr::reduce 这个函数。谢谢! - Jennifer Thompson
1个回答

6
我们可以使用Reduce
set.seed(1453)
r1 <- map(c(5, 10, 15), make.df)  %>% 
           Reduce(function(...) full_join(..., by = "id"), .)

或者可以使用reduce函数来实现。

library(purrr)
set.seed(1453)
r2 <- map(c(5, 10, 15), make.df)  %>%
             reduce(full_join, by = "id")

identical(r1, r2)
#[1] TRUE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接