Другой подход к тидиверсу / dplyr
пример данных
df <- read.table(text="id date type
2 2015-03-01 a
3 2015-12-12 b
2 2015-01-05 Alert
2 2015-01-15 c
2 2015-01-01 d
2 2015-12-02 a
3 2015-12-02 Alert
3 2015-12-02 a
4 2015-12-02 b
3 2015-12-12 a", header = TRUE, stringsAsFactor = FALSE)
код
library( tidyverse )
df %>%
#set date as Date-class
mutate( date = as.Date( date ) ) %>%
arrange( date ) %>%
group_by( id ) %>%
#calculate days to next event
mutate( days_diffrence_1 = ifelse( type == "Alert", lead( date, n = 1L, order_by = id ) - date, NA ),
days_diffrence_2 = ifelse( type == "Alert", lead( date, n = 2L, order_by = id ) - date, NA ) ) %>%
filter( !is.na( days_diffrence_1 ) )
результат
# id date type days_diffrence_1 days_diffrence_2
# <int> <date> <chr> <dbl> <dbl>
# 1 2 2015-01-05 Alert 10 55
# 2 3 2015-12-02 Alert 0 10