## [1] "fr_FR.UTF-8"

1 Introduction

Comprendre comment manipuler les dates est une compĆ©tence cruciale lorsque l’on travaille avec des donnĆ©es de santĆ©. Les calendriers de vaccination, la surveillance des maladies, et les changements dans les indicateurs de santĆ© Ć  l’échelle de la population nĆ©cessitent tous de travailler avec des dates. Dans cette leƧon, nous allons apprendre comment R stocke et affiche les dates, ainsi que comment les manipuler, les analyser et les formatter efficacement. CommenƧons !

2 Learning Objectives

  • Vous comprenez comment les dates sont stockĆ©es et manipulĆ©es dans R

  • Vous comprenez comment convertir des chaĆ®nes de caractĆØres en dates

  • Vous savez gĆ©rer les colonnes de dates de formats mixtes

  • Vous ĆŖtes capable de changer l’affichage des dates

3 Packages

Veuillez charger les packages nƩcessaires pour cette leƧon avec le code ci-dessous :

if(!require(pacman)) install.packages("pacman")
pacman::p_load(tidyverse, 
               lubridate)

4 Datasets

4.1 PID Malawi

Le premier jeu de donnĆ©es que nous utiliserons contient des donnĆ©es liĆ©es aux pulvĆ©risation intradomiciliaire d’insecticide (PID) dans le cadre des efforts de lutte contre le paludisme entre 2014 et 2019 Ć  Illovo, au Malawi. Notez que le jeu de donnĆ©es est au format long, chaque ligne reprĆ©sentant une pĆ©riode pendant laquelle les PID ont eu lieu dans un village. Ɖtant donnĆ© que le mĆŖme village est pulvĆ©risĆ© Ć  plusieurs reprises Ć  diffĆ©rents moments, les noms de village se rĆ©pĆØtent. Les jeux de donnĆ©es au format long sont souvent utilisĆ©s lorsque l’on traite des donnĆ©es de sĆ©ries chronologiques avec des mesures rĆ©pĆ©tĆ©es, car ils sont plus faciles Ć  manipuler pour les analyses et les visualisations.

pid <- read_csv(here("data/Illovo_PID.csv"))
pid

Les variables incluses dans le jeu de donnƩes sont les suivantes :

  • village: nom du village où la PID a eu lieu
  • cible_PID: nombre de structures ciblĆ©es pour la PID
  • reelle_PID: nombre de structures rĆ©ellement PID
  • date_debut_defaut: le jour où la PID a commencĆ©, au format par dĆ©faut ā€œaaaa-mm-jjā€
  • date_fin_defaut: jour où la PID s’est terminĆ©e, au format par dĆ©faut ā€œaaaa-mm-jjā€
  • date_debut_typique: jour où la pulvĆ©risation a commencĆ©, au format ā€œjj/mm/aaaaā€
  • date_debut_longue: jour où la PID a commencĆ©, avec le mois Ć©crit en entier, jour Ć  deux chiffres, puis annĆ©e Ć  quatre chiffres
  • date_debut_mixte: jour où la PID a commencĆ© avec un mĆ©lange de diffĆ©rents formats

4.2 SƩjours hospitaliers

Le deuxiĆØme jeu de donnĆ©es constitue des donnĆ©es factices de sĆ©jours hospitaliers simulĆ©s. Il contient les dates d’admission et de sortie de 150 patients. Tout comme le jeu de donnĆ©es PID, les dates d’admission sont formatĆ©es de diffĆ©rentes maniĆØres afin que vous puissiez exercer vos compĆ©tences en matiĆØre de formatage.

sej_hosp <- read_csv(here("data/sejours_hospitaliers.csv"))
sej_hosp

5 Introduction aux Dates en R

Dans R, il existe une classe spĆ©cifique conƧue pour gĆ©rer les dates, appelĆ©e Date. Le format par dĆ©faut pour cette classe est ā€œaaaa-mm-jjā€. Par exemple, le 31 dĆ©cembre 2000 serait reprĆ©sentĆ© comme 2000-12-31.

Cependant, si vous entrez simplement une telle chaîne de caractères de date, R va initialement la considérer comme un caractère :

class("2000-12-31")
## [1] "character"

Si nous voulons crƩer une Date, nous pouvons utiliser la fonction as.Date() et Ʃcrire la date en suivant le format par dƩfaut :

my_date <- as.Date("2000-12-31")
class(my_date)
## [1] "Date"

Notez le ā€œDā€ majuscule dans la fonction as.Date() !

Maintenant que vos objets sont de la classe Date, vous pouvez maintenant faire des calculs simples comme trouver la diffƩrence entre deux dates :

as.Date("2000-12-31") - as.Date("2000-12-20")
## Time difference of 11 days

Ceci ne serait bien sûr pas possible si vous aviez de simples caractères :

"2000-12-31" - "2000-12-20"
Error in "2000-12-31" - "2000-12-20" : 
  non-numeric argument to binary operator

De nombreuses autres opĆ©rations s’appliquent uniquement Ć  la classe Date. Nous les explorerons en dĆ©tail plus tard.


Le format par dĆ©faut pour as.Date() est ā€œaaaa-mm-jjā€. D’autres formats courants comme ā€œmm/jj/aaaaā€ ou ā€œjj mois, aaaaā€ ne fonctionneront pas par dĆ©faut :

as.Date("12/31/2000") 
as.Date("31 dec, 2000")

Cependant, R acceptera Ć©galement ā€œ/ā€ au lieu de ā€œ-ā€ tant que l’ordre est toujours ā€œaaaa/mm/jjā€. Les dates s’afficheront au format par dĆ©faut ā€œaaaa-mm-jjā€ :

as.Date("2000/12/31")
## [1] "2000-12-31"

En rĆ©sumĆ©, les seuls formats qui fonctionnent par dĆ©faut sont ā€œaaaa-mm-jjā€ et ā€œaaaa/mm/jjā€. Plus tard dans cette leƧon, nous allons apprendre Ć  gĆ©rer diffĆ©rents formats de date et on vous donnerons des conseils sur la coercion de dates importĆ©es sous forme de chaĆ®nes de caractĆØres dans la classe Date. Pour l’instant, l’essentiel est de comprendre que les dates ont leur propre classe avec ses propres propriĆ©tĆ©s de formatage.

Il existe une autre classe de donnĆ©es utilisĆ©e pour les dates, appelĆ©e POSIXct. Cette classe gĆØre les dates et heures ensemble, et le format par dĆ©faut est ā€œaaaa-mm-jj hh:mm:ssā€. Cependant, dans le cadre de ce cours, nous ne travaillerons pas avec cette classe car ce niveau d’analyse est beaucoup moins courant dans le domaine de la santĆ© publique.


6 Conversion de chaînes de caractères en dates

Revenons Ơ nos donnƩes PID et regardons comment R a classƩ nos variables de date !

pid %>% 
  select(contains("date"))
## # A tibble: 112 Ɨ 5
##    date_debut_defaut date_fin_defaut date_debut_typique
##    <date>            <date>          <chr>             
##  1 2014-04-07        2014-04-17      07/04/2014        
##  2 2014-04-22        2014-04-27      22/04/2014        
##  3 2014-05-13        2014-05-13      13/05/2014        
##  4 2014-05-13        2014-05-13      13/05/2014        
##  5 2014-05-13        2014-05-13      13/05/2014        
##  6 2014-05-15        2014-05-26      15/05/2014        
##  7 2014-05-27        2014-05-27      27/05/2014        
##  8 2014-05-27        2014-05-27      27/05/2014        
##  9 2014-05-28        2014-06-16      28/05/2014        
## 10 2014-06-18        2014-06-27      18/06/2014        
## # ℹ 102 more rows
## # ℹ 2 more variables: date_debut_longue <chr>, …

Comme nous pouvons le voir, les deux colonnes reconnues comme des dates sont date_debut_defaut et date_fin_defaut, qui suivent le format ā€œaaaa-mm-jjā€ de R :

   date_debut_defaut  date_fin_defaut  date_debut_typique
   šŸ‘‰<date>šŸ‘ˆ          šŸ‘‰<date>šŸ‘ˆ        <chr>               
 1 2014-04-07          2014-04-17        07/04/2014       
 2 2014-04-22          2014-04-27        22/04/2014

Toutes les autres colonnes de date dans notre jeu de donnĆ©es ont Ć©tĆ© importĆ©es comme des chaĆ®nes de caractĆØres (ā€œchrā€), et si nous voulons les transformer en dates, nous devons indiquer Ć  R qu’elles sont des dates, ainsi que spĆ©cifier l’ordre des composants de la date.

Vous vous demandez peut-ĆŖtre pourquoi il est nĆ©cessaire de spĆ©cifier l’ordre. Eh bien, imaginez qu’on ait une date Ć©crite 01-02-03. Est-ce le 2 janvier 2003 ? Le 1er fĆ©vrier 2003 ? Ou peut-ĆŖtre le 2 mars 2001 ? Il existe tellement de conventions diffĆ©rentes pour Ć©crire les dates que si R devait deviner le format, il y aurait inĆ©vitablement des cas où il se tromperait.

Pour rĆ©soudre ce problĆØme, il existe deux faƧons principales de convertir des chaĆ®nes en dates qui impliquent de spĆ©cifier l’ordre des composants. La premiĆØre approche s’appuie sur les fonctions natives de R (appelĆ© courrament par son nom anglais, ā€œBase Rā€), et la seconde utilise un package appelĆ© lubridate de la bibliothĆØque tidyverse. Regardons d’abord la fonction native de R !

6.1 Avec les fonctions natives de R (Base R)

Dans l’introduction nous avons vu comment convertir des chaĆ®nes de caractĆØres en dates avec les fonctions natives de R, plus prĆ©cisement avec la fonction as.Date(). Essayons de l’appliquer Ć  notre colonne date_debut_typique sans spĆ©cifier l’ordre des composants pour voir ce qui se passe.

pid %>%
  mutate(date_debut_typique = as.Date(date_debut_typique)) %>% 
  select(date_debut_typique)

Ɖvidemment, ce n’est pas du tout ce que nous voulions ! Si nous regardons la variable d’origine, nous pouvons voir qu’elle est formatĆ©e ā€œjj/mm/aaaaā€. R a essayĆ© d’appliquer son format par dĆ©faut Ć  ces dates, ce qui donne ces rĆ©sultats Ć©tranges.

Souvent, R vous retournera un message d’erreur si vous essayez de convertir des charactĆØres ambiguĆ«s en dates sans spĆ©cifier l’ordre de leurs composants. Mais, comme nous venons de le voir, ce n’est pas toujours le cas ! VĆ©rifiez toujours que votre code s’est exĆ©cutĆ© comme prĆ©vu et ne vous fiez jamais seulment aux messages d’erreur pour vous assurer que vos transformations de donnĆ©es ont fonctionnĆ© correctement.

Pour que R interprĆØte correctement nos dates, nous devons utiliser l’option format et spĆ©cifier les composants de notre date Ć  l’aide d’une sĆ©rie de symboles. Le tableau ci-dessous montre les symboles pour les composants de format les plus courants :

Composant Symbol Exemple
AnnƩe, en format long (4 chiffres) %Y 2023
AnnƩe, format abrƩgƩ (2 chiffres) %y 23
Mois, en format numƩrique (1-12) %m 01
Mois Ʃcrit en format long %B janvier
Mois Ʃcrit en format abrƩgƩ %b janv
Jour du mois %d 31
Jour de la semaine, en format numƩrqiue (1-7 en commenƧant par dimanche) %u 5
Jour de la semaine Ʃcrit en format long %A vendredi
Jour de la semaine Ʃcrit en format abrƩgƩ %a ven

**Add note about systems computer language

Si on revient Ć  notre variable d’origine date_debut_typique, on voit qu’elle est formatĆ©e ā€œjj/mm/aaaaā€, ce qui correspond au jour du mois, suivi du mois reprĆ©sentĆ© par un nombre (01-12), puis de l’annĆ©e en format long (4 chiffres). Si nous utilisons ces symboles, nous devrions obtenir les rĆ©sultats que nous cherchons.

pid %>%
  mutate(date_debut_typique = as.Date(date_debut_typique, format="%d%m%Y")) 

Bon, ce n’est toujours pas ce que nous voulions. Avez-vous une idĆ©e de la raison pour laquelle Ƨa n’a pas marchĆ© ? C’est parce que les composants de nos dates sont sĆ©parĆ©s par un slash ā€œ/ā€, que nous devons inclure dans notre option de format. Essayons Ć  nouveau !

pid %>%
  mutate(date_debut_typique = as.Date(date_debut_typique, format="%d/%m/%Y"))%>% 
  select(date_debut_typique)

Cette fois Ƨa a parfaitement fonctionnĆ© ! Maintenant nous savons comment convertir des chaĆ®nes de caractĆØres en dates en utilisant la fonction native de R as.Date() avec l’option format.

Convertir date longue

Essayez de convertir la colonne date_debut_longue des donnĆ©es PID en classe Date. N’oubliez pas d’inclure tous les Ć©lĆ©ments dans l’option de format, y compris les symboles qui sĆ©parent les composants de la date !

Trouver les erreurs de code

Est-ce que vous arrivez Ć  trouver toutes les erreurs dans le code suivant ?

as.Date("26 juin, 1987", format = "%d%b%y")
## [1] NA

6.2 Avec lubridate

Le package lubridate nous donne une faƧon beaucoup plus simple de convertir des chaĆ®nes de caractĆØres en dates que les fonctions natives de R. Avec ce package, il suffit de spĆ©cifier l’ordre dans lequel apparaissent l’annĆ©e, le mois, et le jour en utilisant respectivement les lettres ā€œyā€ pour l’annĆ©e, ā€œmā€ pour le mois et ā€œdā€ pour le jour (correspondant Ć  ā€œyearā€, ā€œmonthā€ et ā€œdayā€ en anglais). Avec ces fonctions, ce n’est pas nĆ©cessaire de spĆ©cifier les caractĆØres qui sĆ©parent les diffĆ©rents composants de la date.

Regardons quelques exemples :

mdy("04/30/2002")
## [1] "2002-04-30"
dmy("30 avril 2002")
## Warning: All formats failed to parse. No formats found.
## [1] NA
ymd("2002-04-03")
## [1] "2002-04-03"

Facile ! Et comme nous pouvons le voir, nos dates sont affichƩes en utilisant le format R par dƩfaut. Maintenant que nous arrivons Ơ utiliser les fonctions du package lubridate, essayons de les appliquer Ơ la variable date_debut_longue de notre jeu de donnƩes.

pid %>%
  mutate(date_debut_longue = mdy(date_debut_longue)) %>% 
  select(date_debut_longue) 
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `date_debut_longue = mdy(date_debut_longue)`.
## Caused by warning:
## !  77 failed to parse.

Parfait, c’est exactement ce qu’on voulait !

Convertir date typique Essayez de convertir la colonne date_debut_typique du jeu de donnƩes PID en classe Date en utilisant les fonctions du package lubridate.

Formatage de base et lubridate

Le tableau suivant contient les formats trouvƩs dans les colonnes date_adm_abrege et date_adm_mixte de notre jeu de donnƩes de patients hospitalisƩs. Est ce que vous arrivez Ơ remplir les cellules vides ?

Exemple Base R Lubridate
07 dƩc 2022
03-27-2022 mdy
28.04.2022
%Y/%m/%d

Maintenant que nous connaissons deux faƧons de convertir des chaĆ®nes de caractĆØres en classe Date en spĆ©cifiant l’ordre des composants ! Mais que faire si nous avons plusieurs formats de date dans la mĆŖme colonne ? Passons Ć  la section suivante pour le dĆ©couvrir !


7 GƩrer des dates mixtes avec lubridate::parse_date_time()

Lorsque l’on travaille avec des dates, il arrive parfois d’avoir diffĆ©rents formats au sein de la mĆŖme colonne. Heureusement, lubridate dispose d’une fonction pratique Ć  cet effet ! La fonction parse_date_time() est similaire aux fonctions que nous avons vues prĆ©cĆ©demment dans le package lubridate, mais avec plus de flexibilitĆ© et la possibilitĆ© d’inclure plusieurs formats de date dans le mĆŖme appel en utilisant l’argument orders. Jetons un rapide coup d’œil Ć  son fonctionnement avec quelques exemples simples.

Pour comprendre comment utiliser parse_date_time(), appliquons-le à une seule chaîne de caractères que nous voulons convertir en date.

parse_date_time("30/07/2001", orders="dmy")
## [1] "2001-07-30 UTC"

C’est parfait ! Utiliser la fonction de cette faƧon est Ć©quivalent Ć  utiliser la fonction dmy(). Cependant, la vraie puissance de parse_date_time() se rĆ©vĆØle lorsque nous avons plusieurs dates avec des formats diffĆ©rents.

La partie ā€œUTCā€ est le fuseau horaire par dĆ©faut utilisĆ© pour analyser la date. Celui-ci peut ĆŖtre modifiĆ© avec l’argument tz=, mais changer le fuseau horaire par dĆ©faut est rarement nĆ©cessaire lorsqu’on traite uniquement de dates, contrairement Ć  des dates-heures.

Regardons un autre exemple avec deux formats diffƩrents :

parse_date_time(c("1 jan 2000", "07/30/2001"), orders=c("dmy", "mdy"))
## [1] "2000-01-01 UTC" "2001-07-30 UTC"

Notez que cet exemple spĆ©cifique fonctionnera toujours si vous changez l’ordre dans lequel vous prĆ©sentez les formats :

parse_date_time(c("1 jan 2000", "07/30/2001"), orders=c("mdy", "dmy"))
## [1] "2000-01-01 UTC" "2001-07-30 UTC"

Le dernier bloc de code fonctionne toujours car parse_date_time() vĆ©rifie chaque format spĆ©cifiĆ© dans l’argument orders jusqu’à trouver une correspondance. Cela signifie que, que vous listiez ā€œdmyā€ en premier ou ā€œmdyā€ en premier, il essaiera les deux formats sur chaque chaĆ®ne de date pour voir lequel convient. L’ordre n’a pas d’importance pour des chaĆ®nes de dates distinctes qui ne peuvent correspondre qu’à un seul format.

Cependant, lorsque l’on traite des dates ambiguĆ«s comme ā€œ01/02/2000ā€ ou ā€œ01/03/2000ā€, qui pourraient ĆŖtre interprĆ©tĆ©es soit comme le 2 janvier et le 3 janvier, soit comme le 1er fĆ©vrier et le 1er mars respectivement, l’ordre dans orders a vraiment de l’importance :

parse_date_time(c("01/02/2000", "01/03/2000"), orders=c("mdy", "dmy"))
## [1] "2000-01-02 UTC" "2000-01-03 UTC"

Dans l’exemple ci-dessus, parce que ā€œmdyā€ est listĆ© en premier, la fonction interprĆØte les dates comme Ć©tant le 2 janvier et le 3 janvier. Mais, si vous changiez l’ordre et listiez ā€œdmyā€ en premier, elle interprĆ©terait les dates comme Ć©tant le 1er fĆ©vrier et le 1er mars :

parse_date_time(c("01/02/2000", "01/03/2000"), orders=c("dmy", "mdy"))
## [1] "2000-02-01 UTC" "2000-03-01 UTC"

Par consĆ©quent, lorsqu’il y a une ambiguĆÆtĆ© potentielle dans les chaĆ®nes de dates, l’ordre dans lequel vous spĆ©cifiez les formats devient trĆØs important.

Utilisation de parse_date_time

Les dates dans le code ci-dessous sont le 9 novembre 2002, le 4 décembre 2001 et le 5 juin 2003. Complétez le code pour les convertir de caractères en dates.

parse_date_time(c("11/09/2002", "12/04/2001", "2003-06-05"), orders=c(...))

Revenons Ơ notre jeu de donnƩes, cette fois sur la colonne date_debut_mixte.

pid %>%
  select("date_debut_mixte") 

Ɖtant donnĆ© que cette colonne a Ć©tĆ© crƩƩe spĆ©cifiquement pour ce cours, nous connaissons les diffĆ©rents formats de date qu’elle contient. Dans votre propre travail, assurez-vous toujours de connaĆ®tre le format de vos dates, car nous savons que certaines peuvent ĆŖtre ambiguĆ«s.

Ici, nous travaillons avec quatre formats diffƩrents, plus prƩcisƩment :

  • aaaa/mm/jj

  • jj mois aaaa

  • jj-mm-aaaa

  • mm/jj/aaaa

Voyons Ć  quoi cela ressemble dans lubridate par rapport au R de base :

Example date Base R Lubridate
2014/05/13 %Y/%m/%d ymd
13 mai 2014 %B%d%Y dmy
27-05-2014 %d-%m-%Y dmy
07/21/14 %m/%d/%y mdy

Ici, lubridate considĆØre qu’il n’y a que trois formats diffĆ©rents (ā€œymdā€, ā€œmdyā€ et ā€œdmyā€). Maintenant que nous savons comment nos donnĆ©es sont formatĆ©es, nous pouvons utiliser la fonction parse_date_time() pour les changer en classe Date.

pid %>%
  select(date_debut_mixte) %>%
  mutate(date_debut_mixte = parse_date_time(date_debut_mixte, orders = c("mdy", "ymd", "dmy")))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `date_debut_mixte = parse_date_time(date_debut_mixte, orders =
##   c("mdy", "ymd", "dmy"))`.
## Caused by warning:
## !  25 failed to parse.
date_debut_mixte
2014-04-07
2014-04-22
2014-05-13
NA
2014-05-13

C’est beaucoup mieux ! R a correctement formatĆ© notre colonne et elle est dĆ©sormais reconnue comme une variable de type date. Vous vous demandez peut-ĆŖtre si l’ordre des formats est nĆ©cessaire dans ce cas. Essayons un ordre diffĆ©rent pour le dĆ©couvrir !

pid %>%
  select(date_debut_mixte) %>%
  mutate(date_debut_mixte = parse_date_time(date_debut_mixte, orders = c("dmy", "mdy", "ymd")))
## Warning: There was 1 warning in `mutate()`.
## ℹ In argument: `date_debut_mixte = parse_date_time(date_debut_mixte, orders =
##   c("dmy", "mdy", "ymd"))`.
## Caused by warning:
## !  25 failed to parse.
date_debut_mixte
2014-04-07
2014-04-22
2014-05-13
NA
2014-05-13

Cela ne semble pas avoir fait de diffĆ©rence, les dates sont toujours formatĆ©es correctement ! Si vous vous demandez pourquoi l’ordre importait dans notre exemple prĆ©cĆ©dent mais pas ici, c’est liĆ© au fonctionnement de la fonction parse_date_time(). Lorsqu’elle reƧoit plusieurs ordres, la fonction tente de trouver la meilleur correspondance pour un sous-ensemble d’observations en considĆ©rant les sĆ©parateurs de dates et en favorisant l’ordre dans lequel les formats ont Ć©tĆ© fournis. Dans notre dernier exemple, les deux dates Ć©taient sĆ©parĆ©es par un ā€œ/ā€ et les deux formats fournis (ā€œdmyā€ et ā€œmdyā€) Ć©taient des formats possibles, la fonction a donc favorisĆ© le premier donnĆ©.

parse_date_time(c("01/02/2000", "01/03/2000"), orders=c("mdy", "dmy"))
## [1] "2000-01-02 UTC" "2000-01-03 UTC"
parse_date_time(c("01/02/2000", "01/03/2000"), orders=c("dmy", "mdy"))
## [1] "2000-02-01 UTC" "2000-03-01 UTC"

Dans nos donnĆ©es PID, nous avions aussi des formats qui pouvaient ĆŖtre ambigus comme jj-mm-aaaa et mm/jj/aaaa. Mais ici, la fonction peut utiliser les sĆ©parateurs comme indice pour trouver des rĆØgles de formatage et distinguer les diffĆ©rents formats. Par exemple, si nous avons une date ambiguĆ« comme 01-02-2000, mais aussi une date avec le mĆŖme sĆ©parateur qui n’est pas ambiguĆ« comme 30-05-2000, la fonction dĆ©terminera que la rĆ©ponse la plus probable est que toutes les dates sĆ©parĆ©es par un ā€œ-ā€ sont au format jj-mm-aaaa, et appliquera cette rĆØgle de maniĆØre rĆ©cursive aux donnĆ©es d’entrĆ©e. Si vous voulez en savoir plus sur les dĆ©tails de la fonction parse_date_time(), cliquez ici ou exĆ©cutez ?parse_date_time dans R !

Utilisation de parse_date_time avec adm_date_messy A l’aide du tableau que vous avez rempli pour l’exercice de la Section 6.2 Lubridate, utilisez la fonction parse_date_time() pour changer la classe de la colonne date_adm_mixte du jeu de donnĆ©es de patients hospitalisĆ©s en Date, ip!


8 Modifier l’Affichage des Dates

Jusqu’à prĆ©sent, nous avons converti des chaĆ®nes de caractĆØres de divers formats en classe Date qui suit un format par dĆ©faut ā€œaaaa-mm-jjā€. Mais que faire si nous voulons que nos dates s’affichent dans un format spĆ©cifique qui est diffĆ©rent de ce format par dĆ©faut, comme lorsque nous crĆ©ons des rapports ou des graphiques ? Cela est rendu possible en reconvertissant les dates en chaĆ®nes de caractĆØres en utilisant la fonction format()!

La fonction format() vous offre une grande flexibilitĆ© pour personnaliser l’apparence de vos dates selon vos prĆ©fĆ©rences. Vous pouvez accomplir cela en utilisant les mĆŖmes symboles que nous avons vu avec la fonction as.Date(), en les ordonnant pour correspondre Ć  l’apparence souhaitĆ©e de votre date. Revenons au tableau pour rafraĆ®chir notre mĆ©moire sur la faƧon dont les diffĆ©rentes parties d’une date sont reprĆ©sentĆ©es dans R.

Composant Symbol Exemple
AnnƩe, en format long (4 chiffres) %Y 2023
AnnƩe, format abrƩgƩ (2 chiffres) %y 23
Mois, en format numƩrique (1-12) %m 01
Mois Ʃcrit en format long %B janvier
Mois Ʃcrit en format abrƩgƩ %b janv
Jour du mois %d 31
Jour de la semaine, en format numƩrqiue (1-7 en commenƧant par dimanche) %u 6
Jour de la semaine Ʃcrit en format long %A vendredi
Jour de la semaine Ʃcrit en format abrƩgƩ %a ven

TrĆØs bien, essayons maintenant d’appliquer cette fonction Ć  une seule date. Disons que nous voulons que la date 2000-01-31 s’affiche comme ā€œ31 janv. 2000ā€.

my_date <- as.Date("2000-01-31")
format(my_date, "%d %b. %Y")
## [1] "31 Jan. 2000"

Créer un vecteur de dates Créez un vecteur de dates contenant la date du 7 mai 2018. Formatez ensuite la date en jj/mm/aaaa en tant que caractère.

Maintenant, essayons de l’utiliser sur nos donnĆ©es PID. CrĆ©ons une nouvelle variable appelĆ©e date_debut_char Ć  partir de la colonne date_debut_defaut. Nous allons la formater pour qu’elle s’affiche comme jj-mm-aaaa.

pid %>% 
  mutate(date_debut_char = format(date_debut_defaut, "%d-%m-%Y")) %>% 
  select(date_debut_defaut)

Super ! Faisons un dernier exemple en utilisant notre variable date_fin_defaut et en la formatant comme jj mois aaaa.

pid %>% 
  mutate(end_date_char = format(date_fin_defaut, "%d %B %Y")) %>% 
  select(date_fin_defaut)

GƩnial !


EN RƉSUMƉ

Félicitations pour avoir terminé la première leçon sur les dates ! Maintenant que vous comprenez comment les dates sont stockées, affichées et formatées dans R, vous pouvez passer à la section suivante où vous apprendrez à effectuer des manipulations avec les dates et à créer des graphiques de séries temporelles de base.


Answer Key

Convertir une date longue

irs <- irs %>%
  mutate(start_date_long = as.Date(start_date_long, format="%B, %d %Y"))

Trouver les erreurs de code

as.Date("Juin 26, 1987", format = "%B %d, %Y")

Convertir une date typique

irs %>%
  mutate(start_date_typical = dmy(start_date_typical))

Formatage de base et lubridate

Date example Base R Lubridate
07 dec, 2022 %b %d, %Y dmy
03-27-2022 %m-%d-%Y mdy
28.04.2022 %d.%m.%Y dmy
2021/05/23 %Y/%m/%d ymd

Utilisation de parse_date_time

parse_date_time(c("11/09/2002", "12/04/2001", "2003-06-05"), orders=c("mdy", "ymd"))

Utilisation de parse_date_time avec adm_date_messy

ip %>%
  mutate(adm_date_messy = parse_date_time(adm_date_messy, orders = c("mdy", "dmy", "ymd")))

CrƩer un vecteur de dates

my_date <- as.Date("2018-05-07")
format(my_date, "%m/%d/%Y")

Contributors

The following team members contributed to this lesson: