r - 从 map() 调用加入 data.frames 列表

标签 r dplyr purrr tidyverse

是否有一种“tidyverse”方式来加入 data.frames 列表(a la full_join(),但对于 >2 个 data.frames)?由于调用 map(),我有一个 data.frames 列表。 .我用过 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()

最佳答案

我们可以使用 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

关于r - 从 map() 调用加入 data.frames 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41147372/

相关文章:

r - 在 mutate 之外使用 nest 和 purrr::map

r - Purrr 的修改函数

r - 如何正确拆分字符值

r - 将 DDMMYYYY 格式的字符串(无分隔符,三位数年份,省略千禧年)解析为 Date 类

r - 带过滤功能的日期条件非标准评估

r - 选定列的 mutate_each

r - 如何移动嵌套 tibbles 中的 tibbles 列?

r - 如何找到不同几何图形和美学的列表

R使用quantmod获取行名日期

r - 使用 dplyr::case_when 进行整洁的评估编程