在R中使用reduce2()连接数据帧

时间:2019-09-01 09:49:54

标签: r reduce

这里的a link介绍了reduce2()的用法。

哈德利介绍了示例,

  

您可能有一个要连接在一起的数据框列表,并且用于连接的变量因元素而异。

我无法想象情况如何。

我了解reduce2(),因为我了解a link

中的示例
x <- list(c(0, 1), c(2, 3), c(4, 5))
y <- list(c(6, 7), c(8, 9))
reduce2(x, y, paste)
#> [1] "0 2 6 4 8" "1 3 7 5 9"

但是哈德利所描述的例子对我来说很难想象。

有人可以描述这个例子吗?

1 个答案:

答案 0 :(得分:2)

工作示例

这是哈德利可能想到的一个例子。 想象一下,我们有一个列表,其中包含这些数据框

library(dplyr)
library(purrr)

df1=data.frame(a = runif(10),b = runif(10),a_0 = c(1,2,2,5,3,1,2,2,5,3))
df2=data.frame(a = runif(5),c = runif(5),b_0 = c(4,1,4,1,4))
df3=data.frame(c = runif(3),d = runif(3),a = runif(3),c_0 = c(5,1,2))
df4=data.frame(b = runif(5),a = runif(5),e = runif(5),d_0 = c(5,1,5,3,1))

lst = list(df1,df2,df3,df4)

现在,我们想通过将它们以二列为二列的方式来减少这些数据帧,这不是是基于公共列/列的;在我们的情况下,该列将为a列。相反,我们对根据by_list中给出的给定对对left_joining数据帧感兴趣:

by_list=list(c("a_0"="b_0"),c("a_0"="c_0"),c("a_0"="d_0"))

调用reduce2()函数时,将得到以下输出:

reduce2(lst,by_list,left_join)

The Output of the Function Call

在这里我们可以看到,这会产生一个列表,其中包含a_0的列df1中存在的公共元素中的所有长格式行,以及其在其他数据帧中的对应对。 请注意 ,例如a.xa.ya.x.xa.y.y的后缀表示/分隔嵌套联接操作中同名的列,未用于任何联接操作。