【问题标题】:Join data frames using reduce2() in R在 R 中使用 reduce2() 连接数据帧
【发布时间】:2020-01-04 18:45:20
【问题描述】:

这里是a link,介绍了reduce2()的使用。

Hadley 介绍了这个例子,

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

我无法完全想象情况如何。

我了解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"

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

谁能描述一下这个例子?

【问题讨论】:

  • 你不明白这个函数是如何工作的吗?还是你想提出一个现实世界的问题来应用它?
  • 我的看法是:您有一个 data.frames 列表作为第一个较长的参数。第二个参数,一个较短的元素,将包含累积 data.frame 和下一个元素之间连续连接的映射。正如文档所说,一个专门的功能
  • 我正在尝试提出一个现实世界的问题来应用:df1 &lt;- data.frame(x = c(0, 2, 4), y = c(1, 3, 5)); df2 &lt;- data.frame(a = c(6, 8), b = c(7, 9)); lst &lt;- list(df1, df2) 并使用reduce2() 来堆叠它?我无法理解情况。 @jenesaisquoi

标签: r reduce


【解决方案1】:

一个工作示例

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

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)

现在,我们希望通过将它们 2×2 的 left_joining 来减少这些数据帧,这不是基于公共列/列;在我们的例子中,这将是列a。相反,我们有兴趣根据by_list 中提供的给定对左加入数据帧:

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)

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

【讨论】:

  • 如果在dfs 之前提供set.seed() 会更好。不过,还是非常感谢。明白了!
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 2014-10-24
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多