Итак, у меня есть таблица (~ 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")
Это запустится, но ничего не даст, и я должен выйти из него.Любые мысли приветствуются.
Спасибо!