Следующий код объединяет исходный набор данных с обобщенной версией, которая получает следующую (последнюю) торговую дату, используя lead
. Я изменил имена ваших переменных, чтобы было проще кодировать.
names(df) <- c("Date","last_trading_date", "Expiry_month")
library(dplyr)
inner_join(df, group_by(df, Expiry_month) %>%
summarise(last_trading_date = max(last_trading_date)) %>%
mutate(next_date = lead(last_trading_date), Time_dif = next_date-last_trading_date)) %>%
select(-next_date)
Date last_trading_date Expiry_month Time_dif
1 2011-07-15 2011-10-17 2011-11-10 59 days
2 2011-07-15 2011-10-17 2011-11-10 59 days
3 2011-07-15 2011-10-17 2011-11-10 59 days
4 2011-07-15 2011-10-17 2011-11-10 59 days
5 2011-07-15 2011-10-17 2011-11-10 59 days
6 2011-07-15 2011-12-15 2012-01-10 122 days
7 2011-07-15 2011-12-15 2012-01-10 122 days
8 2011-07-15 2012-04-15 2012-05-10 NA days