R эквивалент SQL-запроса - сумма целочисленного столбца, где столбец даты между параметрами - PullRequest
0 голосов
/ 18 сентября 2018

Здравствуйте, я пытаюсь получить сумму целочисленного столбца, в котором дата, указанная в отдельном столбце, находится между заданными параметрами.

Следующий 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

1 Ответ

0 голосов
/ 18 сентября 2018

Библиотека dplyr является одним из наиболее часто используемых пакетов манипулирования данными для R. В вашем конкретном случае нам нужно:

  • left_join для LEFT JOIN
  • filter для предложения WHERE
  • 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 ресурсов там.Я предлагаю вам запустить трубы одну за другой, чтобы понять, что происходит.

...