Условное соединение с использованием sqldf в R с данными времени - PullRequest
0 голосов
/ 13 марта 2019

Итак, у меня есть таблица (~ 2000 строк, назовите ее df1), когда конкретный субъект получил лекарство в определенный день, и у меня есть большой файл Excel (> 1 миллион строк) данных о весе для субъектовдля разных дат (назовите это df2).

AIM : я хочу сгруппировать по темам и найти вес в df2, который был записан ближе всего ко времени администратора лекарства в df1, используя sqldf (потому чтотаблицы слишком велики для загрузки в R).Или, в качестве альтернативы, я могу установить интересующий период времени (например, +/- 1 неделя медикаментозного лечения) и найти строку, которая попадает в этот период.

Пример:

 df1 <- data.frame(
  PtID = rep(c(1:5), each=2),
  Dose = rep(seq(100,200,25),2),
  ADMIN_TIME =seq.Date(as.Date("2016/01/01"), by = "month", length.out = 10)
)

 df2 <- data.frame(
   PtID = rep(c(1:5),each=10),
   Weight = rnorm(50, 50, 10),
   Wt_time = seq.Date(as.Date("2016/01/01"), as.Date("2016/10/31"), length.out = 50)
 )

Так что я думаю, что я хочу left_join df1 и df2, сгруппировать по PtID и установить некоторое условие, которое определяет либо ближайший df2 $ Weight к df1 $ Admin_timeили df2 $ Weight в допустимом диапазоне около df1 $ Admin_time с использованием форматирования sql.

Итак, я попытался создать диапазон, а затем запросил следующее:

library(dplry)
library(lubridate)
 df1 <- df1 %>% 
   mutate(ADMIN_START = ADMIN_TIME - ddays(30),
          ADMIN_END = ADMIN_TIME + ddays(30))

#df2.csv is the large spreadsheet saved in my working directory
 result <- read.csv.sql("df2.csv", sql = "select Weight from file
                left join df1
                on file.Wt_time between df1.ADMIN_START and df1.ADMIN_END")

Это запустится, но ничего не даст, и я должен выйти из него.Любые мысли приветствуются.

Спасибо!

...