# A tibble: 5 x 4
group task start end
<chr> <dbl> <chr> <chr>
1 a 1 01:00 01:30
2 a 2 02:00 02:25
3 b 3 01:05 01:40
4 b 4 01:50 02:30
5 a 5 03:00 03:30
E desejo um output similar a este:
# A tibble: 5 x 7
group last_task last_end next_task next_start next_end interval
<chr> <dbl> <chr> <dbl> <chr> <chr> <chr>
1 a NA NA 1 01:00 01:30 NA
2 a 1 01:30 2 02:00 02:25 00:30
3 b NA NA 3 01:05 01:40 NA
4 b 3 01:40 4 01:50 02:30 00:10
5 a 2 02:25 5 03:00 03:30 00:35
De modo que cada linha contenha as duplas tarefa anterior + próxima tarefa, mantendo os respectivos grupos.
O interesse é calcular o intervalo do término da última tarefa até o início da próxima, do mesmo grupo.
De maneira figurada, é uma “linha do tempo” onde:
A-B
B-C
C-D
No SQL isto é possível via vários joins condicionais na mesma tabela. No R não obtive o mesmo resultado.
Show, @Athos
Com lag e lead eu consegui fazer. A lógica dessa função é simplesmente buscar a linha seguinte/anterior para um determinado grupo (portanto o arrange), ou ele faz um avaliação mais específica do dado maior/menor, mais antigo/mais novo?
@Guilherme! Não sei se entendi sua dúvida. Parece que é as duas coisas ao mesmo tempo. Para cada grupo (definido no group_by) o lead e o lag vai ser aplicado dentro de cada grupo (não vai ter troca de informação inter grupos). Sobre o arrange, ele serve para que o lead e o lag respeite a ordem temporal.
Se vc quiser o mais recente ou o mais antigo vc teria que usar as funções min e max. Mas se tiver ordenado vc pode usar as funções first, last, nth, lag, lead, etc.
Então ordenar é bem conveniente para essas operações!