Bonjour à tous,
je fais face à un petit (?) problème qui commence à me prendre le choux :
En gros, je dispose d'une liste d'identités, auxquelles sont associés des évènements (sous forme d'un code, mais peu importe), auxquels sont associés des dates.
Ce qui donne sous forme d'un dico (que j'ai essayé de traiter sous perl mais je suis pas plus doué sous ce langage, l'idéal étant que je le fasse sous R), avec différents cas de figures :
Ce qui sous R est sous forme d'un dataframe. Avec, en l'occurrence plein d'autres données, dont des "épisodes", tous initialisé à 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 %dicomachin = ( id1 => { event1 => date1, event2 => date2, }, id2 => { event3 => date3, }, id3 => { event4 => NULL, }, );
id1 event1 date1 1 id1 event2 date2 1 id2 event3 date3 1 id3 event4 NULL 1
L'idée étant que je veux classifier ces évènements en épisodes en fonction de la date.
Ici, pour l'id1, l'idée est de déterminer quelle date est la plus ancienne, et changer l'épisode à 2 pour la date la plus récente (en sachant qu'il faudrait qu'il y ait au moins un mois d'écart entre les deux, un vrai mois d'environ 30 jours, pas juste une différence d'un mois sur la date. Si il y a 10 jours d'écart, ça reste le même épisode. La limite n'est pas défini pour l'instant, je dis un mois (presque) arbitrairement).
Pour l'id2, pas besoin d'y toucher, puisqu'il n'y a qu'un seul event. L'épisode reste donc à 1.
Il existe quelques cas problématiques comme l'id3 où l'event n'a pas de dates. Quand il n'y a qu'un event, pas de soucis. Mais si il y en a plusieurs sans dates pour le même id, c'est un problème, ces cas seront donc ignorés pour l'instant.
Pour donner un ordre d'idée, j'ai environ 10000 id, pour 22000 event dont 200 n'ont pas de dates. Certains id ont jusqu'à une vingtaine d'event, mais aucun n'a pas d'event.
Je tourne en rond, et je manque vraiment beaucoup trop de connaissance et de pratique en R pour ça j'ai l'impression.
Calculer la différence entre deux dates, jusqu'ici, ça va. Par exemple :
Mais au-delà de ça...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 mesdates<-function(date_i,date_j){ difftime(strptime(df$date[date_i], format = "%Y-%m-%d"), strptime(df$date[date_j], format = "%Y-%m-%d"), units = "weeks") }
Si vous avez des pistes, des idées, je suis preneur. Merci !
Partager