j'ai un problème dans le temps d’exécution dans ma boucle for
je travaille sur une longue table de longueur 87726 lignes
un exemple pour une personne
Code : Tout sélectionner
[id_personne id_dossier Date.sortie Mode_sortie ...]
[1 d1 12/12/2018 2 ]
[1 d2 12/08/2018 1 ]
[1 d3 12/03/2018 3 ]
[2 d1 12/08/2018 1 ]
[2 d1 12/03/2018 2 ]
pour chaque personne qui ont plusieurs dossiers je devrai vérifier plusieurs conditions pour calculer le indice le nombre de dossier index(nbr_dossier_index) et le nombre h
j'avais travaillé avec une boucle for mais ça me prend beaucoup de temps
est ce que quelqu'un peux m'aide pour gérer mes condition sans utiliser la boucle ?
Code : Tout sélectionner
personne<- unique(tbl_annee_en_cour[,"id_personne"])
nbr_h=0
nbr_dossier_index=0
date_deb_annee_cour<- as.Date("01/01/2018",format="%d/%m/%Y")
date_fin_annee_cour<- as.Date("31/12/2018",format="%d/%m/%Y")
time1<-Sys.time()
for (i in 1:nrow(personne)) {
dossier_pour_chaque_per<-tbl_annee_en_cour %>% filter(id_personne==personne$id_personne[i] )
if(dossier_pour_chaque_per$Mode.ent.G[1]=="1" | dossier_pour_chaque_per$Mode.ent.G[1]=="2"){
if(dossier_pour_chaque_per$Mode.sor.G[1]=="1" | dossier_pour_chaque_per$Mode.sor.G[1]=="8" ){
if(dossier_pour_chaque_per$Date.sortie.dossier[1] > date_deb_annee_cour & dossier_pour_chaque_per$Date.sortie.dossier[1] < date_fin_annee_cour){
nbr_dossier_index=nbr_dossier_index+1
}
}
}
if(nrow(dossier_pour_chaque_per)>2){
if(substr(dossier_pour_chaque_per$varible3[1],1,5)=="02jkl" | substr(dossier_pour_chaque_per$variable3[1],1,5)=="02jll"){
if((dossier_pour_chaque_per$Date.entree.dossier[2] - dossier_pour_chaque_per$Date.sortie.dossier[1]) <= 7){
if(substr(dossier_pour_chaque_per$variable3[2],1,5)=="02C5l" | substr(dossier_pour_chaque_per$variable3[2],1,5)=="02m2l"){
if((dossier_pour_chaque_per$Date.entree.dossier[3] - dossier_pour_chaque_per$Date.sortie.dossier[2] ) <=7){
nbr_h=nbr_h+1
}
else{
nbr_h=nbr_h
}
}
else{
nbr_h=nbr_h+1
}
}
}
else{
if((dossier_pour_chaque_per$Date.entree.dossier[2] - dossier_pour_chaque_per$Date.sortie.dossier[1] ) <= 7){
if(dossier_pour_chaque_per$Mode.ent.G[2]=="1" | dossier_pour_chaque_per$Mode.ent.G[2]=="2"){
nbr_h=nbr_h+1
}
}
}
}
}
time2<-Sys.time()
difftime(time2, time1)
Merci
Cordialement