Нахождение временных интервалов внутри группы с помощью dplyr - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть следующий тиббл:

   start_dttm           chan
   <dttm>              <dbl>
 1 2018-03-27 23:32:22     5
 2 2018-03-27 22:41:24    15
 3 2018-03-27 22:41:57    15
 4 2018-03-27 22:42:02    15
 5 2018-03-27 22:42:48    15
 6 2018-03-27 22:42:55    15
 7 2018-03-27 22:42:41    15
 8 2018-03-27 22:43:04    15
 9 2018-03-27 22:43:24    15
10 2018-03-27 22:43:38    15
11 2018-03-27 22:44:16    15
12 2018-03-27 22:44:03    15

Цель состоит в том, чтобы найти временные интервалы между строками в каждом chan, т.е. для строки 1 я хочу получить NA, для строки 2 - 33 секунды, для строки 3 - 5 секунд и т. Д. Я думал добавить дополнительный столбец, использующий mutate, который будет хранить следующее значение start_dttm в этой группе. В моде, похожей на dplyr::first(start_dttm). Есть предложения?

1 Ответ

0 голосов
/ 27 апреля 2018

Вы можете group_by chan, а затем рассчитать разницу, используя lead:

df %>% 
    group_by(chan) %>% 
    mutate(time_diff = lead(start_dttm) - start_dttm)

# A tibble: 12 x 3
# Groups:   chan [2]
#   start_dttm          chan  time_diff
#   <dttm>              <chr> <time>   
# 1 2018-03-27 23:32:22 5     NA       
# 2 2018-03-27 22:41:24 15    33       
# 3 2018-03-27 22:41:57 15    5        
# 4 2018-03-27 22:42:02 15    46       
# 5 2018-03-27 22:42:48 15    7        
# 6 2018-03-27 22:42:55 15    -14      
# 7 2018-03-27 22:42:41 15    23       
# 8 2018-03-27 22:43:04 15    20       
# 9 2018-03-27 22:43:24 15    14       
#10 2018-03-27 22:43:38 15    38       
#11 2018-03-27 22:44:16 15    -13      
#12 2018-03-27 22:44:03 15    NA 
...