R等同于SQL查询-参数之间的日期列的整数列之和

时间:2018-09-18 10:24:31

标签: r sqldf

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

以下SQL查询可以满足我的要求,但是在sqldf中查询速度太慢,因此我需要找到一个R等效项。数据是医院发作的数据,其中“停留”列指示该发作在医院度过的天数。 df表包含每个患者的Index和EndDate(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

1 个答案:

答案 0 :(得分:1)

dplyr库是R中最常用的数据处理程序包之一。 在您的特定情况下,我们需要:

  • left_join for LEFT JOIN
  • filter for WHERE子句
  • group_by for 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资源。我建议您一个接一个地运行管道,以了解发生了什么。