【问题标题】:How to perform multiple left joins using dplyr in R [duplicate]如何在 R 中使用 dplyr 执行多个左连接 [重复]
【发布时间】:2015-11-11 00:50:58
【问题描述】:

如何在 R 中使用 dplyr 连接多个数据框?

new <- left_join(x,y, by = "Flag")

这是我用来左连接 x 和 y 的代码 该代码不适用于多个连接

new <- left_join(x,y,z by = "Flag")

【问题讨论】:

标签: r dplyr


【解决方案1】:

你可以使用嵌套的left_join

 left_join(x, y, by='Flag') %>%
                left_join(., z, by='Flag') 

或者另一种选择是将所有数据集放在list 中,并使用base R 中的mergeReduce

Reduce(function(...) merge(..., by='Flag', all.x=TRUE), list(x,y,z))

或者我们有来自plyrjoin_all。同样在这里,我们将数据帧放在list 中,并使用参数type='left' 进行左连接。

library(plyr)
join_all(list(x,y,z), by='Flag', type='left')

【讨论】:

  • 我想你也可以将left_join 嵌入到Reduce 中,但似乎昨天已经问过几次了,不是吗?
  • @DavidArenburg 是的,它可以并且对多个数据集很有用。我只是想使用%&gt;%
  • 管道选项和使用 join_left 减少的速度要快得多(1.8 秒)(在我的情况下快 10 倍 - 当然取决于您的数据等)。使用合并减少非常慢(16 秒),但如果您将合并替换为 left_join,那么您的速度与管道相当(平均慢一点 1.9 秒但不显着)。最慢的是 plyr 的 join_all (22s)。
  • @nouse 您可以只选择真正需要的列,以便除了by 列之外,两个数据集中都有唯一的名称。如果有重复的列名,那将附加 .x x.x 等。
  • @DannyBullis 在tidyverse中,.指的是%&gt;%的lhs中的整个对象所以,它是从x和y的左连接创建的data.frame
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 2018-02-17
  • 2019-07-29
  • 2019-03-09
  • 2014-09-17
  • 1970-01-01
相关资源
最近更新 更多