在 R / dplyr 中循环完全连接
Posted
技术标签:
【中文标题】在 R / dplyr 中循环完全连接【英文标题】:Loop full joins in R / dplyr 【发布时间】:2018-08-16 14:56:42 【问题描述】:我正在尝试构建一个 for 循环,该循环将在 dplyr 中进行一系列完全连接。
我想加快速度:
join1 <- full_join(Q1_output, Q2_output)
join2 <- full_join(join1, Q3_output)
join3 <- full_join(join2, Q4_output)
join4 <- full_join(join3, Q5_output)
join5 <- full_join(join4, Q6_output)
join6 <- full_join(join5, Q7_output)
join7 <- full_join(join6, Q8_output)
join8 <- full_join(join7, Q9_output)
输出文件的数量并不总是等于 9,但它们总是采用 Qn_output 格式,其中 n 会针对给定的一系列分析而变化。
有没有办法构造一个可以做到这一点的函数?输出文件将始终是数据帧并且将始终加入一个公共变量。对于是否可以构建一个类似的循环来获取 N 列数据帧并将其转换为 N 个向量(例如重复 Q1
谢谢!
【问题讨论】:
plyr::join_all( ...list of dataframes..., type="full" )
【参考方案1】:
我们可以使用mget
来返回list
中的值
lst <- mget(paste0("Q", 1:9, "_output")
然后通过 full_join
reduce
将其添加到单个数据集
library(tidyverse)
reduce(lst, full_join, by = 'variable')
【讨论】:
这太棒了!如果我在数据框中有多个公共变量,但我只想加入一个,我是否只需在 full_join 后添加 ,by="variable" ? @Jason 谢谢。当然。你必须这样做。我更新了帖子。我以为您希望连接变量根据共性自动获取 很抱歉没有在此处指定。这行得通,但它出现了一个关于负值的错误,这在过去表明数据框太大。但是,当我通过公共变量手动完成完全连接时,情况并非如此。你知道是什么原因造成的吗? @Jason 不确定负值的错误。如果有一个您感兴趣的公共变量,最好指定它 它是:full_join_impl(x, y, by$x, by$y, suffix$x, suffix$y, check_na_matches(na_matches)) 中的错误:不允许负长度向量。添加by =“变量”后,我得到了这个。但是手动进行 8 次全连接时,没有错误。以上是关于在 R / dplyr 中循环完全连接的主要内容,如果未能解决你的问题,请参考以下文章
inner join(内连接)left join(左连接)right join(右连接)full join(全连接)区别
R使用dplyr group_by / sum for循环,作为连接列表输出