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
[modifier | modifier le wikicode]install.packages(c("lubridate", "magrittr"))
library("lubridate")
library("magrittr")
Convertir les chaînes de caractères ou dates ou en heures
[modifier | modifier le wikicode]Les 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
[modifier | modifier le wikicode]Pour 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
[modifier | modifier le wikicode]Les 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
[modifier | modifier le wikicode]lubridate
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 | modifier le wikicode]
Voir aussi
[modifier | modifier le wikicode]- Vignette Lubridate, anglais
- Dates and times dans l'ouvrage R for data-science], anglais