在 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_joinreduce 将其添加到单个数据集

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(全连接)区别

如何在 PyTorch 中高效实现非全连接线性层?

R使用dplyr group_by / sum for循环,作为连接列表输出

人工智能 AI 3:全连接网络,前馈神经网络卷积神经网络:非全连接网络CNN:循环神经网络

人工智能 AI 3:全连接网络,前馈神经网络卷积神经网络:非全连接网络CNN:循环神经网络