Целью этого проекта является измерение временного интервала между проверкой в медицинской лаборатории и самой последней дозой лекарства. У каждого пациента разное количество последующих доз этого лекарства, и количество последующих лабораторных проверок также различно для каждого субъекта.
Первый фрейм данных содержит study_id и даты соответствующих доз:
library(dplyr)
library(lubridate)
study_id<- c(1, 1, 1, 2, 2, 3)
dose_dt <- c('1/1/00', '2/1/00', '3/1/00', '1/1/01', '2/1/01', '1/1/02')
doses_df <- data.frame(study_id, dose_dt)
doses_df$dose_dt <- mdy(doses_df$dose_dt)
print(doses_df)
study_id dose_dt
1 1 2000-01-01
2 1 2000-02-01
3 1 2000-03-01
4 2 2001-01-01
5 2 2001-02-01
6 3 2002-01-01
Второй фрейм данных имеет совпадающий study_id, на этот раз с датами лабораторных проверок и соответствующими лабораторными значениями, а также индикатором аномалий (да нет).
study_id <- c(1, 1, 1, 2, 3, 3, 3)
lab_dt <- c('1/1/99', '3/1/00', '4/1/00', '2/1/01', '2/1/02', '3/1/02', '4/1/02')
lab_result <- c(100, 200, 50, 25, 75, 100, 75)
lab_abn_yn <- c(0, 0, 1, 1, 1, 0, 1)
labs_df <- data.frame(study_id, lab_dt, lab_result, lab_abn_yn)
labs_df$lab_dt <- mdy(labs_df$lab_dt)
print(labs_df)
study_id lab_dt lab_result lab_abn_yn
1 1 1999-01-01 100 0
2 1 2000-03-01 200 0
3 1 2000-04-01 50 1
4 2 2001-02-01 25 1
5 3 2002-02-01 75 1
6 3 2002-03-01 100 0
7 3 2002-04-01 75 1
Обратите внимание, что у субъекта 1 есть один лабораторный осмотр, который был в прошлом до первой дозы лекарства, у субъекта 2 больше доз, чем лабораторных, а у субъекта 3 меньше доз, чем лабораторных.
Я хочу, чтобы R определил дату самой последней дозы лекарства до лабораторной проверки, чтобы я мог рассчитать интервал между дозой и лабораторной проверкой. Выход будет сохранять лабораторные значения и показатели. Предпочтительно, чтобы лабораторные проверки до первой дозы (отрицательный интервал времени от дозы до лабораторной проверки) регистрировались как NA, но я легко могу отфильтровать отрицательные временные интервалы. Я также знаю, как использовать lubridate для расчета временных интервалов, поэтому нужно добавить это к объяснению.
Желаемый вывод:
study_id lab_dt most_recent_dose_dt lab_result lab_abn_yn interval_months
<dbl> <chr> <chr> <chr> <dbl> <dbl>
1 1 1999-01-01 NA NA NA NA
2 1 2000-03-01 2000-02-02 200 0 0.966
3 1 2000-04-01 2000-03-01 50 1 1
4 2 2001-02-01 2001-01-01 25 1 1
5 3 2002-02-01 2002-01-01 75 1 1
6 3 2002-03-01 2002-01-01 100 0 2
7 3 2002-04-01 2002-01-01 75 1 3
Я пробовал несколько схем слияния, но ни одна не сохраняет все данные. Есть ~ 40 000 предметов, поэтому сделать это вручную невозможно. Любая помощь высоко ценится.