R 等效于 SQL 查询 - 整数列的总和,其中日期列在参数之间



嗨,我正在尝试获取整数列的总和,其中单独列中给出的日期在给定参数之间。

以下 SQL 查询执行了我想要的操作,但是查询在 sqldf 中太慢了,因此我需要找到一个 R 等效项。数据是医院发作的数据,其中"住院"列表示该发作的住院天数。df 表包含每个患者的索引和结束日期 (AnonID(

SELECT m.*, b.Sum
FROM df   
LEFT JOIN
(SELECT AnonID, SUM(e.Stay) AS Sum
FROM 
(SELECT e.*, d.IndexDate, d.EndDate
FROM Episodes e
LEFT JOIN df d
ON e.AnonID=d.AnonID )a
WHERE AdmissionDate BETWEEN CAST(a.IndexDate AS datetime2) AND CAST(a.EndDate AS datetime2)
GROUP BY AnonID) b

dplyr库是 R 最常用的数据操作包之一。 在您的特殊情况下,我们需要:

  • 左联接left_join
  • WHERE 子句的filter
  • group_by为 GROUP BY
  • summarise(或summarize(来计算聚合,例如 SUM
  • %>%用于管道,纯粹美观,但它使代码更易于阅读

把所有这些放在一起,你应该有这样的东西:

library(dplyr)
eps_in_range <- episodes %>%
left_join(df, by="AnonID") %>%
filter(AdmissionDate >= IndexDate, 
AdmissionDate <= EndDate) %>%
group_by(AnonID) %>%
summarise(stay_sum = sum(Stay))
df %>%
left_join(eps_in_range)

如果不查看数据或了解您想要实现的目标,很难确保这是 100% 正确的。希望这足以让您入门。那里有很多dplyr资源。我建议你一个接一个地运行管道以了解正在发生的事情。

最新更新