library(dplyr) library(magrittr)
db <- readRDS('../produced_data/10-vvs_2017_clean.rds')
En théorie un envois de RSS est répété jusqu'à M12. Cepedant un RSS peut disparaître d'envois successifs car :
Ces observations manquantes provoquent des erreurs lors du calcul de l'évolution de la valorisation. En effet, lorsque qu'un RSS disparaît, sa valeur n'apparaît pas en négatif le mois suivant. La valorisation totale est donc faussée, car pour la facturation cette somme est bien retirée.
La solution est d'ajouter des observations qui ajoute un montant à 0. Par la suite, ceci permettra de compter une différence de valorisation égale à la différence entre la valorisation du mois précédent et celle de cette observation vide, autrement dit une valorisation négative du mois précédent.
envois_manquants <- db %>% # 1.1 Grouper par RSS group_by(rss) %>% # 1.2 Trier par mois d'envoi arrange(mois_envoi) %>% # 2 Identifier les observations dont l'envoi suivant est manquant mutate( # 2.1 Créer un vecteur avec le numéro du mois suivant. Ce vecteur est un # décalage du vecteur `mois_envoi` en retirant le premier élément. Le # dernier élément est `NA`. Je n'utilise pas `mois_envoi[2:n()]` car il peut # n'y avoir qu'une seule observation (exemple : les RSS des séjours sortis # en M12). La fonction `seq_len` renvoi un entier de longueur 0 lorsque la # séquence est de longueur 0 et donc le vecteur de mois_envoi sera null. mois_envoi_suivant = c(mois_envoi[seq_len(n()-1)+1], NA), # 2.2 L'envoi suivant est considéré comme manquant différence entre le mois # d'envoi en cours et le suivant n'est pas égal à 1 ou qu'il n'y a pas de # numéro de mois suivant et que le mois en cours n'est pas le dernier mois. # Ceci veut dire que le RSS sera renvoyé plus tard. envoi_suivant_manque = ((mois_envoi_suivant - mois_envoi != 1) | is.na(mois_envoi_suivant)) & (mois_envoi != 12) ) %>% ungroup %>% # Ne sélectionner que les envois dont le suivant manque filter(envoi_suivant_manque)
Vérification
# Nombre d'envoi manquants nrow(envois_manquants) # Répartition table(envois_manquants$mois_envoi + 1)
# Envoi manquants mais qui ré-apparaissent plus tard table(envois_manquants$mois_envoi[!is.na(envois_manquants$mois_envoi_suivant)])
Exemple
exrss <- envois_manquants %>% ungroup %>% filter(!is.na(envois_manquants$mois_envoi_suivant)) %>% .$rss %>% as.character db %>% filter(rss == exrss[2]) %>% select(rss, mois_sortie, mois_envoi)
Ajouter des observations virtuelles pour ces envois manquants
db$obs_virtuelle = FALSE db2 <- envois_manquants %>% select(rss, nda, mois_envoi, mois_sortie) %>% mutate( mois_envoi = as.integer(mois_envoi + 1), obs_virtuelle = TRUE) %>% bind_rows(db) %>% arrange(rss, mois_envoi)
Vérifier le résultat
db2 %>% filter(rss == exrss[2]) %>% select(rss, mois_sortie, mois_envoi, obs_virtuelle, mnt_tot_am)
saveRDS(db2, '../produced_data/20_vvs_2017_avec_manquants.rds')
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.