在 R 中加入两个条件

问题描述 投票:0回答:1

我想在 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 r postgresql left-join rstudio
1个回答
0
投票

由于 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
  )
© www.soinside.com 2019 - 2024. All rights reserved.