3

我想知道是否有人知道dplyr扩展包 (dbplyrdtplyr) 是否允许在通常的 dplyr 工作流程中进行非 equi 连接?我很少需要data.table,但快速非 equi 连接是我总是需要的唯一时刻setDT,然后执行连接,然后用as_tibble(). 我浏览了 github 上包中的问题,但没有发现这是计划中的还是已经实现的。

4

2 回答 2

2

对于dbplyr:虽然 SQL 支持非 equi 连接,但我还没有找到等效的 dplyr 方法。我通常的工作与@Waldi 发布的 r-bloggers 链接非常相​​似,用于加入平等条件,然后过滤不平等条件。

例如:

output = join(df1, df2, by = c("df1_id" = "df2_id")) %>%
  filter(df1_date <= df2_date)

这转化为类似于以下内容的 SQL:

SELECT *
FROM df1
JOIN df2
ON df1_id = df2_id
WHERE df1_date <= df2_date

这与以下内容没有什么不同:

SELECT *
FROM df1
JOIN df2
ON df1_id = df2_id
AND df1_date <= df2_date
于 2021-02-25T21:37:24.770 回答
0

dbplyr自 1.4.0 版以来,有一个新选项: sql_on. 引用Kirill Müller 的话

dplyr 有 #2240,但这需要一段时间。对于数据库,我们已经有一个解决方法 [ie. 通用 SQL 连接]。

library(dplyr)
library(dbplyr)
tbl1 <- memdb_frame(a = 1:3, b = 4:2)
tbl2 <- memdb_frame(c = 1:3, b = 2:0)
left_join(tbl1, tbl2, sql_on = "LHS.b < RHS.c")
于 2021-11-26T15:47:48.610 回答