Контекст: Насколько я вижу, R не имеет согласованных функций, которые облегчают подготовку данных в контексте анализа истории выживания / событий, например, разделение эпизодов для включения изменяющихся во времени ковариат (иногда называемых «подсчетом данных процесса»).
Для каждого человека (id
) указывается время начала (start.cp
) и время окончания (stop.cp
) каждого эпизода. Кроме того, для каждого из 1,2, ..., p изменяющихся во времени ковариат (TVC) мы знаем, когда начинается эпизод (tvc.start_
) и когда он заканчивается (tvc.stop_
).
В моем примере (см. Ниже) количество TVC равно 2, но обычно это число может варьироваться (от 1 до p).
Пример:
Входные данные:
id start.cp stop.cp tvc.start1 tvc.start2 tvc.stop1 tvc.stop2
1 1 1 2 2 3 4 7
2 1 2 3 2 3 4 7
3 1 3 4 2 3 4 7
4 1 4 7 2 3 4 7
5 1 7 12 2 3 4 7
structure(list(id = c(1, 1, 1, 1, 1), start.cp = c(1, 2, 3, 4,
7), stop.cp = c(2, 3, 4, 7, 12), tvc.start1 = c(2, 2, 2, 2, 2
), tvc.start2 = c(3, 3, 3, 3, 3), tvc.stop1 = c(4, 4, 4, 4, 4
), tvc.stop2 = c(7, 7, 7, 7, 7)), .Names = c("id", "start.cp",
"stop.cp", "tvc.start1", "tvc.start2", "tvc.stop1", "tvc.stop2"),
row.names = c(NA, 5L), class = "data.frame")
Имена TVC известны, т.е. в этом примере известно, что
tvc.start <- c("tvc.start1", "tvc.start2")
tvc.stop <- c("tvc.stop1", "tvc.stop2")
Ожидаемые результаты:
id start.cp stop.cp tvc.start1 tvc.start2 tvc.stop1 tvc.stop2 tvc.d1 tvc.d2
1 1 1 2 2 3 4 7 0 0
2 1 2 3 2 3 4 7 1 0
3 1 3 4 2 3 4 7 1 0
4 1 4 7 2 3 4 7 0 1
5 1 7 12 2 3 4 7 0 1
structure(list(id = c(1, 1, 1, 1, 1), start.cp = c(1, 2, 3, 4,
7), stop.cp = c(2, 3, 4, 7, 12), tvc.start1 = c(2, 2, 2, 2, 2
), tvc.start2 = c(3, 3, 3, 3, 3), tvc.stop1 = c(4, 4, 4, 4, 4
), tvc.stop2 = c(7, 7, 7, 7, 7), tvc.d1 = c(0, 1, 1, 0, 0), tvc.d2 = c(0,
0, 0, 1, 1)), .Names = c("id", "start.cp", "stop.cp", "tvc.start1",
"tvc.start2", "tvc.stop1", "tvc.stop2", "tvc.d1", "tvc.d2"), row.names = c(NA,
5L), class = "data.frame")
Вопрос: Для каждого TVC я хотел бы создать новый вектор (tvc.d1
, tvc.d2
, см. Пример), который указывает, что данный эпизод (определяется start.cp
и stop.cp
) перекрывает (= 1) интервал TVC. Предполагается, что [start.cp, stop.cp) . Как это можно сделать без зацикливания на наборе ТВЦ, то есть я ищу векторизованное решение.
P.S .: Пожалуйста, не стесняйтесь менять название ...