我该如何使用dplyr
在R中合并多个数据框?
new <- left_join(x,y, by = "Flag")
这是我用来左连接x和y的代码。 但是该代码对于多个连接不起作用。
new <- left_join(x,y,z by = "Flag")
您可以使用嵌套的left_join
library(dplyr)
left_join(x, y, by='Flag') %>%
left_join(., z, by='Flag')
还有另一种选择,就是把所有的数据集放在一个list
中,并使用来自base R
的merge
和Reduce
Reduce(function(...) merge(..., by='Flag', all.x=TRUE), list(x,y,z))
或者我们可以使用来自plyr
的join_all
函数。在这里,我们将数据框放入一个list
中,并使用参数type='left'
进行左连接。
library(plyr)
join_all(list(x,y,z), by='Flag', type='left')
正如@JBGruber在评论中提到的那样,也可以通过purrr
来完成。
library(purrr)
library(dplyr)
purrr::reduce(list(x,y,z), dplyr::left_join, by = 'Flag')
left_join
嵌入到Reduce
中,但昨天好像已经有人问过几次了,是吗? - David Arenburg.
指的是%>%
左侧创建的整个对象。因此,它是从x和y的左连接创建的数据框。 - akrunpurrr::reduce
,因为我认为这是目前最好的选择purrr::reduce(list(x,y,z), dplyr::left_join, by = 'Flag')
。 - JBGruberreduce() merge()
的组合。假设您从环境中收集了一系列频率数据框,并且想要通过“标志”列将它们组合起来:`df_list=mget((ls(pattern=".*_freq")))Reduce(function(...) merge(..., by='hallmarks', all.x=TRUE), df_list )` - bioSlayer
left_join
而不是merge
来同时合并多个数据集。以下是在R中合并多个数据集的方法:这是如何在R中合并多个数据集的方法。 - David ArenburgReduce(function(dtf1,dtf2) left_join(dtf1,dtf2,by="index"), list(x,y,z))
。由于这个问题被标记为重复,我在Simultaneously merge multiple data.frames in a list问题中给出了详细的答案和示例。 - Paul Rougieux