R - операция между группами и НЕ внутри групп - PullRequest
0 голосов
/ 20 марта 2020

У меня есть вопрос, похожий на этот: Операции между группами с dplyr

Я хочу вычислить количество дней между Последним торговым днем ​​моей первой группы и вторая группа, между второй и третьей.

Я группирую данные по месяцу истечения.

Date      `Last trading day`  `Expiry month`    
<date>     <dttm>              <date>                    
1 2011-07-15 2011-10-17 00:00:00 2011-11-10                
2 2011-07-15 2011-10-17 00:00:00 2011-11-10                 
3 2011-07-15 2011-10-17 00:00:00 2011-11-10                 
4 2011-07-15 2011-10-17 00:00:00 2011-11-10                 
5 2011-07-15 2011-10-17 00:00:00 2011-11-10                
6 2011-07-15 2011-12-15 00:00:00 2012-01-10                 
7 2011-07-15 2011-12-15 00:00:00 2012-01-10                
8 2011-07-15 2011-04-15 00:00:00 2012-05-10                

Что я пытаюсь получить:

Date      `Last trading day`  `Expiry month`         `Time_dif`   
<date>     <dttm>              <date>                    <dbl> 
1 2011-07-15 2011-10-17 00:00:00 2011-11-10                 59  
2 2011-07-15 2011-10-17 00:00:00 2011-11-10                 59 
3 2011-07-15 2011-10-17 00:00:00 2011-11-10                 59 
4 2011-07-15 2011-10-17 00:00:00 2011-11-10                 59
5 2011-07-15 2011-10-17 00:00:00 2011-11-10                 59 
6 2011-07-15 2011-12-15 00:00:00 2012-01-10                 122  
7 2011-07-15 2011-12-15 00:00:00 2012-01-10                 122
8 2011-07-15 2012-04-15 00:00:00 2012-05-10                (here it will be the number of days between this group and the next)

Может кто-нибудь помочь, пожалуйста?

Спасибо!

1 Ответ

1 голос
/ 20 марта 2020

Следующий код объединяет исходный набор данных с обобщенной версией, которая получает следующую (последнюю) торговую дату, используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...