1.Создать минимальный воспроизводимый пример :
df <- structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L),
age = c(0L, 1L, 2L, 3L, 4L,5L, 0L, 1L, 2L, 3L, 4L, 5L, 0L, 1L, 2L, 3L, 4L, 5L),
event = c(0L,0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L,1L)),
row.names = c(NA, -18L), class = "data.frame")
2. Решение с использованием dplyr
:
library(dplyr)
df %>%
left_join(df %>%
mutate(timing = if_else(age < 2 & event == 1, 1,
if_else(age >= 2 & event == 1, 2, 0))) %>%
group_by(id) %>%
summarize(timing = ifelse(1 %in% timing, 1,
ifelse(2 %in% timing, 2, 0)))
)
Возвращает:
id age event timing
1 1 0 0 0
2 1 1 0 0
3 1 2 0 0
4 1 3 0 0
5 1 4 0 0
6 1 5 0 0
7 2 0 0 1
8 2 1 1 1
9 2 2 1 1
10 2 3 1 1
11 2 4 1 1
12 2 5 1 1
13 3 0 0 2
14 3 1 0 2
15 3 2 0 2
16 3 3 1 2
17 3 4 1 2
18 3 5 1 2