Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Mamadou Baldé
Messages : 3
Enregistré le : 01 Mar 2019, 16:34

Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Messagepar Mamadou Baldé » 04 Mar 2019, 09:31

Bonjour,
Je dispose d'une liste de personnes avec leurs dates d'entrée et de sortie dans une structure. Ce que je cherche à faire, c'est calculer et reporter pour chaque date, le nombre de personnes présentes au début, le nombre d'entrants, le nombre de sortants et le nombre de présent à la fin de la journée.
Je ne trouve pas de solution même avec des boucles. Je reporte ci-dessous l'exemple des données disponibles et le résultat que je cherche à obtenir.
Données disponibles :
Ident DateEntree DateSortie
1 31/12/2017 01/01/2018
2 01/01/2018 05/01/2018
3 02/01/2018 03/01/2018
8 02/01/2018 05/01/2018
4 03/01/2018 03/01/2018
6 03/01/2018 05/01/2018
5 05/01/2018 06/01/2018
7 05/01/2018 09/01/2018

Le résultat que je cherche à reproduire

date presentdebut entrants sortants presentfin
01/01/2018 1 1 1 1
02/01/2018 1 2 0 3
03/01/2018 3 2 2 3
04/01/2018 3 0 0 3
05/01/2018 3 2 3 2
06/01/2018 2 0 1 1
07/01/2018 1 0 0 1
...

Si quelqu'un a une idée. Merci
Mam

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Messagepar Pierre-Yves Berrard » 04 Mar 2019, 10:46

Bonjour,

Est-ce que remanier la base pour avoir une ligne par jour et par personne aiderait ?

Code : Tout sélectionner

donnees <-
  data.frame(
    Ident = c("1", "2", "3", "8", "4", "6", "5", "7"),
    DateEntree = structure(c(17531, 17532, 17533, 17533, 17534, 17534, 17536, 17536), class = "Date"),
    DateSortie = structure(c(17532, 17536, 17534, 17536, 17534, 17536, 17537, 17540), class = "Date")
  )

Code : Tout sélectionner

library(dplyr)
library(tidyr)

donnees2 <-
  donnees %>%
  transmute(
    Ident = Ident,
    Jours = mapply(seq, DateEntree, DateSortie, by = 1)
  ) %>%
  unnest(Jours)
PY

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Messagepar Serge Rapenne » 04 Mar 2019, 11:26

Bonjour,

je ne comprend pas à quoi correspond presentdebut et presentfin mais sous réserve d'ajouter le calcul voulu dans la fonction rech_nb, ceci devrait te permettre de faire ce que tu cherches :
si les données d’entrée s'appelle dta :

Code : Tout sélectionner

#necessaire si DateEntree et DateSortie sont des caractéres et non des Date
dta$DateEntree<-as.Date(dta$DateEntree,format="%d/%m/%Y")
dta$DateSortie<-as.Date(dta$DateSortie,format="%d/%m/%Y")

#on cree une liste des toutes les dates
debut<-min(dta$DateEntree)
fin<-max(dta$DateSortie)
l_date<-seq(debut,fin,by="day")

#fonction qui cherche le nb d'entrant, de sortant et de présent pour une date donnée. C'est cette fonction qu'il faut adapter
rech_nb<-function(jour,dta){
  nb_entrant<-sum(dta$DateEntree==jour)
  nb_sortant<-sum(dta$DateSortie==jour)
  nb_present<-sum(dta$DateEntree<=jour &  dta$DateSortie>=jour)
  sortie<-data.frame(jour,nb_present,nb_entrant,nb_sortant)
  return(sortie)
}

on fait le calcul pour toutes les dates
resu<-do.call("rbind",lapply(l_date,rech_nb,dta))
resu
           jour nb_present nb_entrant nb_sortant
1  2017-12-31          1          1          0
2  2018-01-01          2          1          1
3  2018-01-02          3          2          0
4  2018-01-03          5          2          2
5  2018-01-04          3          0          0
6  2018-01-05          5          2          3
7  2018-01-06          2          0          1
8  2018-01-07          1          0          0
9  2018-01-08          1          0          0
10 2018-01-09          1          0          1


Serge

Mamadou Baldé
Messages : 3
Enregistré le : 01 Mar 2019, 16:34

Re: Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Messagepar Mamadou Baldé » 04 Mar 2019, 14:39

Bonjour Serge,
merci pour ta réponse. Mais ceci ne marche pas pour moi. le min et le max donne NA. A partir de la ça bloque. Quand même je parviens à generer des date en indiquant manuellement le min et le max, j'obtiens des NA pour chacune des valeurs calculées.
Merci encore.
Mamadou

Serge Rapenne
Messages : 1426
Enregistré le : 20 Aoû 2007, 15:17
Contact :

Re: Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Messagepar Serge Rapenne » 04 Mar 2019, 14:51

Si les min et max des dates ne fonctionnent pas c'est vraisemblablement que les champs DateEntree et DateSortie ne sont pas au format date. Que donne la sortie de str(jeu_de_donnee) (il faut bien sur remplacer "jeu_de_donnée" par le nom de l'objet qui contient tes données)

Une autre possibilité serait qu'il y ai des lignes ou le champ DateEntree ou DateSortie ne soient pas renseignées. Dans ce cas, il faut remplacer

Code : Tout sélectionner

debut<-min(dta$DateEntree)
fin<-max(dta$DateSortie)

par

Code : Tout sélectionner

debut<-min(dta$DateEntree,na.rm=T)
fin<-max(dta$DateSortie,na.rm=T)


Serge

Mamadou Baldé
Messages : 3
Enregistré le : 01 Mar 2019, 16:34

Re: Calcul du nombre de présents, d'entrants et de sortants par jour, semaine ou mois

Messagepar Mamadou Baldé » 04 Mar 2019, 15:01

En effet, il y avait des lignes avec des valeurs manquantes.
Merci beaucoup!


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité