Programmer en R/Manipuler les dates et les heures

Un livre de Wikilivres.

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]