使用 dplyr 绑定数据库中的行

Posted

技术标签:

【中文标题】使用 dplyr 绑定数据库中的行【英文标题】:Using dplyr to bind rows inside a database 【发布时间】:2018-05-15 19:24:11 【问题描述】:

我有两个大表,old_customers 和 new_customers,我想对它们进行行绑定。这已完成,但其中任何一个都太大而无法加载到内存中。但是,我不确定bind_rows 是否允许绑定两个表而不是它们都是数据框。我尝试时收到此错误

old <- tbl(conn, 'old_customers')
new <- tbl(conn, 'new_customers')
old %>% bind_rows(new)
Error in bind_rows_(x, .id) : 
  Argument 1 must be a data frame or a named atomic vector, not a tbl_dbi/tbl_sql/tbl_lazy/tbl

另一个选项是这样的

old <- as.data.frame(tbl(conn, 'old_customers'))
new <- as.data.frame(tbl(conn, 'new_customers'))
old %>% bind_rows(new)

但是,我再次尝试避免将此数据集加载到内存中。有没有办法解决这个问题?

【问题讨论】:

union 函数可能在这里有用 @bouncyball,但联合不会只返回两个表中都有键的行吗?我只想要相当于一个 rbind union_all 函数可能更合适。我真诚地道歉。 看起来成功了! @弹力球。随时提交答案,我会接受。谢谢! 【参考方案1】:

您可以使用union_all 函数,它的操作与rbindbind_rows 非常相似,但应该具有不需要在内存中加载数据的额外优势。

old <- tbl(conn, 'old_customers')
new <- tbl(conn, 'new_customers')
old %>% union_all(new)

【讨论】:

以上是关于使用 dplyr 绑定数据库中的行的主要内容,如果未能解决你的问题,请参考以下文章

如何使用来自底层绑定源的行对 datagridview 行执行样式更改?

使用乘法 NSArrayControllers 和 NSTableView 绑定数据

MS Access中绑定/未绑定形式的问题

回收视图膨胀不同的行:- 绑定数据时出现异常

使用数据绑定控件在 DataGridView 中添加行

怎么删除datagridview中选中的行啊