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