Это может быть очень сложно, и я подозреваю, что это требует передовых знаний. У меня есть два разных типа данных. Я должен комбинировать:
Данные:
Dataframe A:
перечислены все даты переливания по идентификатору пациента. Каждое переливание представлено отдельной строкой, пациенты могут иметь множественные переливания. В тот же день у разных пациентов могут быть переливания.
Patient ID Transfusion.Date
1 01/01/2000
1 01/30/2000
2 04/01/2003
3 04/01/2003
Кадры данных типа B содержат результаты тестов в другие даты, а также идентификатор пациента:
Patient ID Test.Date Test.Value
1 11/30/1999 negative
1 01/15/2000 700 copies/uL
1 01/27/2000 900 copies/uL
2 03/30/2003 negative
Я хотел бы иметь Dataframe A с таким же количеством строк (1 для каждой переливания) и с самым последним Test.Value в качестве отдельного столбца. Каждая дата трансфузии должна иметь результат теста теста, проведенного наиболее близко (ранее) до переливания.
желаемый результат:
- >
Patient ID Transfusion.Date Pre.Transfusion.Test
1 01/01/2000 negative
1 01/30/2000 900 copies/ul
2 04/01/2003 negative
3 04/01/2003 NA
Я думаю, что общая стратегия заключалась бы в подмножестве data.frames по идентификаторам пациентов. Затем возьмите все даты переливания для пациента 1, проверьте, какой результат ближе всего к всем доступным значениям test_dates для каждого элемента, а затем верните ближайшее значение.
Как я могу объяснить R для этого?
Изменить 1. Здесь приведен код R для этих примеров.
df_A <- data.frame(MRN = c(1,1,2,3),
Transfusion.Date = as.Date(c('01/01/2000', '01/30/2000',
'04/01/2003','04/01/2003'),'%m/%d/%Y'))
df_B <- data.frame(MRN = c(1,1,1,2),
Test.Date = as.Date(c('11/30/1999', '01/15/2000', '01/27/2000',
'03/30/2003'),'%m/%d/%Y'), Test.Result = c('negative',
'700 copies/ul','900 copies/ul','negative'))
Изменить 2:
Чтобы уточнить, результирующие данные должны быть: пациент А получил переливание в день X и день Y. (для df_A). До переливания в день X его последний результат теста был Х (ближайшая дата теста для первого переливания в df_B). До переливания в день Y его последний результат теста был Y (до второго переливания, также в df_B. Df_B также содержит кучу других дат тестирования, которые не нужны для конечного результата.