Programmer en R/Manipuler les dates et les heures
La librairie lubridate
définit un grand nombre de fonctions pour manipuler les dates et les heures.
Pré-requis
modifierinstall.packages(c("lubridate", "magrittr"))
library("lubridate")
library("magrittr")
Convertir les chaînes de caractères ou dates ou en heures
modifierLes dates sont souvent stockées comme des chaînes de caractère. Les fonctions ymd()
, dmy()
et ydm()
permettent de convertir les dates au format date.
> dmy("31 janvier 2016")
[1] "2016-01-31"
Extraire des informations d'une date
modifierPour toute date, on peut facilement extraire des éléments comme l'année, le mois, le jour de l'année, le jour du mois, le jour de la semaine, etc.
> x <- dmy("31 octobre 2016")
> year(x) # année
[1] 2016
> month(x) # mois
[1] 10
> month(x, label = TRUE) # mois
[1] Oct
Levels: Jan < Feb < Mar < Apr < May < Jun < Jul < Aug < Sep < Oct < Nov < Dec
> mday(x = x) # jour du mois
[1] 31
> yday(x) # jour de l'année
[1] 305
> wday(x) # jour de la semaine
[1] 2
> wday(x, label = TRUE) # jour de la semaine
[1] Mon
Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat
Arrondir les dates
modifierLes fonctions floor_date()
, round_date()
et ceiling_date()
permettent d'arrondir les dates. On peut choisir l'unité (semaine, mois, année).
> floor_date(x, unit = "week")
[1] "2016-10-30"
> ceiling_date(x, unit = "week")
[1] "2016-11-06 01:00:00 CET"
> round_date(x, unit = "week")
[1] "2016-10-30"
> floor_date(x, unit = "month")
[1] "2016-10-01"
> ceiling_date(x, unit = "month")
[1] "2016-11-01"
> round_date(x, unit = "month")
[1] "2016-11-01"
> floor_date(x, unit = "year")
[1] "2016-01-01"
> ceiling_date(x, unit = "year")
[1] "2017-01-01"
> round_date(x, unit = "year")
[1] "2017-01-01"
Travailler avec des durées, des périodes et des intervalles de temps
modifierlubridate
définit trois concepts différents pour manipuler les durées, les périodes et les intervalles de temps.
Les durées (duration) définissent des différences de temps en secondes.
> dseconds(10)
[1] "10s"
> dminutes(10)
[1] "600s (~10 minutes)"
> dhours(10)
[1] "36000s (~10 hours)"
Un intervalle de temps permet de définir un intervalle entre deux dates ou deux date-heure :
> interval(start = ymd("2014-07-03"), end = today())
[1] 2014-07-03 UTC--2016-11-30 UTC
On peut convertir un intervalle de temps en nombre de secondes, de minutes, de jours, de semaines, de mois ou d'années à l'aide de la fonction time_length()
> time_length(interval(start = ymd("2014-07-03"), end = today()), unit = "seconds")
[1] 76118400
> time_length(interval(start = ymd("2014-07-03"), end = today()), unit = "days")
[1] 881
> time_length(interval(start = ymd("2014-07-03"), end = today()), unit = "weeks")
[1] 125.8571
> time_length(interval(start = ymd("2014-07-03"), end = today()), unit = "months")
[1] 28.9
> time_length(interval(start = ymd("2014-07-03"), end = today()), unit = "years")
[1] 2.410959
Notes et références
modifier
Voir aussi
modifier- Vignette Lubridate, anglais
- Dates and times dans l'ouvrage R for data-science], anglais