J'ai un jeu de données qui contient plusieurs variables, dont deux sont des dates (date de début, date de fin). Parfois, un intervalle de dates a été divisé en séquences :
Démarrage : 1990-12-12, Arrêt : 1990-12-13 Début : 1990-12-13, Arrêt : 1990-12-14
Plutôt que de
Démarrage : 1990-12-12, Fin : 1990-12-14
Ce que je veux faire, c'est isoler ces chaînes de séquences et les regrouper en une seule observation de sorte que toutes les observations de la fin de la séquence soient sauvegardées et que les autres soient écrasées (à l'exception de la première date de début). Voici un exemple de base :
library(tidyverse)
library(lubridate)
tib_ex <- tibble(
id = rep(1,5),
date1 = ymd(c('1990-11-05', '1990-12-01',
'1990-12-05', '1990-12-08',
'1990-12-15')),
date2 = ymd(c('1990-11-28', '1990-12-05',
'1990-12-08', '1990-12-12',
'1990-12-31')),
var1 = 2:6,
var2 = 7:11,
var3 = 12:16,
var4 = c(0, 1, 0 ,0, 1)
)
On obtient ainsi le tableau suivant :
# A tibble: 5 x 7
id date1 date2 var1 var2 var3 var4
<dbl> <date> <date> <int> <int> <int> <dbl>
1 1 1990-11-05 1990-11-28 2 7 12 0
2 1 1990-12-01 1990-12-05 3 8 13 1
3 1 1990-12-05 1990-12-08 4 9 14 0
4 1 1990-12-08 1990-12-12 5 10 15 0
5 1 1990-12-15 1990-12-31 6 11 16 1
Que je souhaite transformer en tibble suivant :
# A tibble: 3 x 7
id date1 date2 var1 var2 var3 var4
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 1 1990-11-05 1990-11-28 2 7 12 0
2 1 1990-12-01 1990-12-12 5 10 15 0
3 1 1990-12-15 1990-12-31 6 11 16 1
J'ai pensé à l'imbrication par id, date1 et date2, qui regroupe le reste des variables dans un tibble par ligne, ce qui facilite l'écrasement, mais je ne sais pas comment réduire efficacement les dates de la ligne 2 à la ligne 4.
J'ai essayé de créer une variable binaire qui indique si la date de fin d'une observation correspond à la date de début de l'observation suivante, mais je rencontre également des difficultés à ce niveau.