*

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

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 09 Avr 2020, 10:39

*

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Nombre de jours ouvrés entre 2 dates

Messagepar Eric Casellas » 09 Avr 2020, 12:34

Salut,

La fonction lubridate::dmy attend en entrée une chaine de caractères avec le format dmy, or tu lui donne tes colonnes date qui ne sont pas dans ce format

Une façon de faire et de convertir tes colonnes dans le bon format, par exemple :

Code : Tout sélectionner

Table$date1 <- format(as.Date(Table$date1), format = "%Y/%m/%d")
Table$date2 <- format(as.Date(Table$date2), format = "%Y/%m/%d")


Eric
Eric

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 09 Avr 2020, 14:45

*

Eric Casellas
Messages : 767
Enregistré le : 06 Jan 2009, 14:59

Re: Nombre de jours ouvrés entre 2 dates

Messagepar Eric Casellas » 09 Avr 2020, 14:59

Chez moi ce code :

Code : Tout sélectionner

Table <- data.frame(
  id = c(1, 2, 3, 4, 5),
  nom = c("Paul", "Matthieu", "Camille", "Mireille", "Capucine"),
  ville = c("Paris", "Marseille", "Lyon", "Lille", "Nantes"),
  animal = c("Chat", "Chien", "Chat", "Chat", "Chien"),
  date1 = c("30/04/2020", "30/03/2019", "31/12/2019", "28/02/2019", "30/06/2024"),
  date2 = c("31/07/2020", "30/06/2020", "31/03/2020", "31/12/2019", "01/06/2023"),
  jf = c(3, 9, 6, 21, -10)
)

  Table$date1 <- format(as.Date(Table$date1), format = "%Y/%m/%d")
  Table$date2 <- format(as.Date(Table$date2), format = "%Y/%m/%d")

library(dplyr)
library(purrr)
library(lubridate)

count_workingdays <- function(start, end) {
  sum( wday(seq(from = start, to = end, by = "1 day")) %in% c(1:5) )
}

Table %>%
    dplyr::mutate_at(.vars = vars(starts_with("date")), .funs = lubridate::dmy) %>%
  filter(date1 <= date2) %>% # to exclude row 5 in your example
  mutate(
    NB_JOURS_RETARD = map2(.x = date1, .y = date2, .f = count_workingdays)
  )


me renvoi :

Code : Tout sélectionner

  id      nom     ville animal      date1      date2 jf NB_JOURS_RETARD
1  1     Paul     Paris   Chat 2020-04-30 2020-07-31  3              66
2  2 Matthieu Marseille  Chien 2020-03-30 2020-06-30  9              67
3  4 Mireille     Lille   Chat 2020-02-28 2020-12-31 21             220


Eric
Eric

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 09 Avr 2020, 15:11

*

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 09 Avr 2020, 15:28

*

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 10 Avr 2020, 03:30

*

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Nombre de jours ouvrés entre 2 dates

Messagepar Mickael Canouil » 10 Avr 2020, 06:35

Bonjour,

vous devriez (ce sera par défaut dans la version 4 de R) désactiver la conversion des chaînes de caractères en facteur au début de votre script.

Code : Tout sélectionner

options(stringsAsFactors = FALSE)

Aussi pensez à redémarrer une session R vierge quand vous observez des comportements "étranges".

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 28 Avr 2020, 04:42

*

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Nombre de jours ouvrés entre 2 dates

Messagepar Mickael Canouil » 28 Avr 2020, 07:54

Bonjour,

vous rendez la tache de vous aider compliqué.
Vous ne nous avez toujours pas indiqué comment vous importiez vos données.

Si je comprends bien, Table n'est pas l'objet que vous avez après l'importation ?
Puisque vous montrez la structure d'un autre jeu de données.

Dans mon code, la conversion en date était effectué par dmy() de la libraire lubridate.
Un premier réflexe de votre part, serait de lire la documentation de cette fonction.


Enfin, pour vous rendre compte de l'effet de stringsAsFactors (cette option existe dans toutes les fonctions read.*() de R base)

Code : Tout sélectionner

str(data.frame(
  
id c(12345),
  
nom c("Paul""Matthieu""Camille""Mireille""Capucine"),
  
ville c("Paris""Marseille""Lyon""Lille""Nantes"),
  
animal c("Chat""Chien""Chat""Chat""Chien"),
  
date1 c("30/04/2020""30/03/2019""31/12/2019""28/02/2019""30/06/2024"),
  
date2 c("31/07/2020""30/06/2020""31/03/2020""31/12/2019""01/06/2023"),
  
jf c(39621, -10), 
  
stringsAsFactors TRUE # default in R < 4.0.0.
))
#> 'data.frame':    5 obs. of  7 variables:
#>  $ id    : num  1 2 3 4 5
#>  $ nom   : Factor w/ 5 levels "Camille","Capucine",..: 5 3 1 4 2
#>  $ ville : Factor w/ 5 levels "Lille","Lyon",..: 5 3 2 1 4
#>  $ animal: Factor w/ 2 levels "Chat","Chien": 1 2 1 1 2
#>  $ date1 : Factor w/ 5 levels "28/02/2019","30/03/2019",..: 3 2 5 1 4
#>  $ date2 : Factor w/ 5 levels "01/06/2023","30/06/2020",..: 4 2 3 5 1
#>  $ jf    : num  3 9 6 21 -10 

Code : Tout sélectionner

str(data.frame(
  id = c(1, 2, 3, 4, 5),
  nom = c("Paul", "Matthieu", "Camille", "Mireille", "Capucine"),
  ville = c("Paris", "Marseille", "Lyon", "Lille", "Nantes"),
  animal = c("Chat", "Chien", "Chat", "Chat", "Chien"),
  date1 = c("30/04/2020", "30/03/2019", "31/12/2019", "28/02/2019", "30/06/2024"),
  date2 = c("31/07/2020", "30/06/2020", "31/03/2020", "31/12/2019", "01/06/2023"),
  jf = c(3, 9, 6, 21, -10), 
  stringsAsFactors 
= FALSE # default in R >= 4.0.0.
))
#> 'data.frame':    5 obs. of  7 variables:
#>  $ id    : num  1 2 3 4 5
#>  $ nom   : chr  "Paul" "Matthieu" "Camille" "Mireille" ...
#>  $ ville : chr  "Paris" "Marseille" "Lyon" "Lille" ...
#>  $ animal: chr  "Chat" "Chien" "Chat" "Chat" ...
#>  $ date1 : chr  "30/04/2020" "30/03/2019" "31/12/2019" "28/02/2019" ...
#>  $ date2 : chr  "31/07/2020" "30/06/2020" "31/03/2020" "31/12/2019" ...
#>  $ jf    : num  3 9 6 21 -10  

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

Elsa Nario
Messages : 83
Enregistré le : 22 Mar 2019, 09:06

*

Messagepar Elsa Nario » 30 Avr 2020, 10:11

*

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Nombre de jours ouvrés entre 2 dates

Messagepar Mickael Canouil » 30 Avr 2020, 13:14

A défaut de mettre les données réels, donnez nous au moins le vrai code d'importation de vos données.

En l'état, vous nous demandez de "débuguer" un jeu de donnée B, qui n'a globalement rien à voir avec votre jeu de donnée réel A, de part sa création, son importation et son traitement.
En résumé, il est strictement impossible de vous aider plus à ce stade.
Mickaël
mickael.canouil.fr | rlille.fr


Retourner vers « Questions en cours »

Qui est en ligne

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