Date

R gère aussi les dates :

> x <- as.Date("2014-02-01")
> class(x)
[1] "Date"

Notez le format YYYY-MM-DD : c’est la norme ISO 8601 qui offre l’avantage de ne pas être ambiguë (ici, c’est bien le 1er février 2014 et pas le 2 janvier 2014).

Typiquement :

> z <- as.Date("01/02/2014")
> z
[1] "0001-02-20"

Souvenez-vous, nous avions créé notre vecteur dates comme ceci :

dates <- as.Date("2000-01-01") + 0:14

C’est-à-dire que les opérateurs arithmétiques et le recyclage fonctionnent aussi sur les objets de classe Date.

De la même manière, certaines fonctions qui fonctionnent pour les vecteurs numériques fonctionnent aussi pour les vecteurs de dates :

> diff(dates)
Time differences in days
 [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Il existe des fonctions « cousines » :

> seq.Date(dates[1], len = 10, by = "week")
 [1] "2000-01-01" "2000-01-08" "2000-01-15" "2000-01-22" "2000-01-29"
 [6] "2000-02-05" "2000-02-12" "2000-02-19" "2000-02-26" "2000-03-04"

Et d’autres fonctions spécifiques à la classe Date :

> weekdays(dates)
 [1] "samedi"   "dimanche" "lundi"    "mardi"    "mercredi" "jeudi"   
 [7] "vendredi" "samedi"   "dimanche" "lundi"    "mardi"    "mercredi"
[13] "jeudi"    "vendredi" "samedi"

(Notez que si votre machine est paramétrée en anglais, vous aurez plutôt Saturday, Sunday, Monday, Tuesday etc…)

Vous pouvez convertir des objets Date en character :

> as.character(dates)
 [1] "2000-01-01" "2000-01-02" "2000-01-03" (…)

Ou en numeric :

> as.numeric(dates)
 [1] 10957 10958 10959 (…)

Dans R, la date d’origine par défaut — la date zéro — est le 1er janvier 1970 :

> as.numeric(as.Date("1970-01-01"))
[1] 0

Et bien sûr :

> as.numeric(as.Date("1969-12-31"))
[1] -1

Si vous souhaitez calculer le nombre de jours écoulés depuis :

as.numeric(Sys.Date() - as.Date("1970-01-01"))

Si vous êtes confronté à une date exprimée dans un format ambigüe :

x <- "31/01/2000"

Vous pouvez la convertir facilement au bon format :

> as.Date(x, "%d/%m/%Y")
[1] "2000-01-31"

Et si vous souhaitez faire le chemin inverse, vous pouvez faire de chose du genre :

format(Sys.Date(), "%d/%m/%Y")
format(Sys.Date(), "%Y-%m")

Il existe aussi une classe POSIXct et une classe POSIXt qui permettent de travailler à la seconde près. Par exemple :

> z <- Sys.time()
> z
[1] "2014-02-26 10:28:20 CET"
> class(z)
[1] "POSIXct" "POSIXt"

Je vous en fais grâce…

Aucun commentaire:

Enregistrer un commentaire