我想在 RStudio 中执行有 2 个条件的连接。我的目标是复制 SQL 查询,如下所示,但是使用 R 语言:
SELECT
ticket_id,
sum(time_to_close)
FROM helpdesk_ticket ht
LEFT JOIN dim_date dd ON ht.create_date <= dd.formatted_date AND dd.formatted_date <= ht.closed_date
GROUP BY 1
假设helpdesk_ticket和dim_date是两个R数据帧,这是我尝试过的,但它在left_join中返回一个错误:
result <- helpdesk_ticket %>%
left_join(dim_date, by = c("create_date" <= "formatted_date", "formatted_date" <= "closed_date")) %>%
group_by(ticket_id) %>%
summarise(time_to_close = sum(time_to_close))
由于 SQL 查询使用带有
<=
和 >=
运算符的区间连接而不是相等 =
,因此请考虑使用 dplyr::join_by
来预先计算要在 left_join
中使用的不等式连接。
by <- join_by(
create_date <= formatted_date,
closed_date >= formatted_date,
)
result <- helpdesk_ticket %>%
left_join(dim_date, by) %>%
group_by(ticket_id) %>%
summarise(time_to_close = sum(time_to_close))
或者,如果两个或其中一个数据集对于笛卡尔积来说不太大,请考虑使用
cross_join
后跟 filter
:
result <- helpdesk_ticket %>%
cross_join(dim_date) %>%
filter(
create_date <= formatted_date,
closed_date >= formatted_date
)