Gérer les données temporelles avec R pour construire un graphique
Langage R
L'essentiel de cette page !
La gestion du temps sous R n'est pas un probable (on parle de données calendaires ou temporelles). Il suffit d'indiquer à R quel est le format de vos dates pour qu'elles soient converties.
Pour avoir un affichage correcte du temps (heure/seconde) en particulier, on peut avoir besoin de faire une conversion avec la fonction hms() à chercher sur ce site.
On notera aussi l'existence de la fonction fix_date_df() de la librairie {DateFixR} qui semble corriger automatiquement toutes les dates mal fichues.
mots clefs : gestion du temps avec R, données temporelles, dates, heure, évolution, période, série temporelle
Exemple : tracer un graphique exprimant des valeurs x en fonction de la date
%Y l'année
%m le mois
%m le jour (numéro)
%W le numéro de la semaine
%Y 2015
format impossible : simple combinaison année-mois
%d-%m-%Y 02-03-2015
%d 02
%m 03
%y 15
x = c(5.7,7.15,7.25,7.3,7.4)
dates = c("2015-03-01","2015-03-02","2015-03-06","2015-03-12","2015-04-01")
# la ligne qui suit précise a R comment lire les dates
dates = strptime(dates, "%Y-%m-%d")
plot(dates,x,col="#AAFF00",pch=16,cex=2,type="o")
Autre exemple de gestion de format du temps et différence sur un intervalle de temps avec difftime()
x = c("19/10/2019 19:00","19/10/2019 22:12")
x = strptime(x,format="%d/%m/%Y %R")
difference_de_temps = as.numeric(difftime(x[2],x[1],units="mins"))
# Conversion en heures et minutes
minutes = difference_de_temps%%60
heures = (difference_de_temps-minutes)/60
cat("La différence de temps est de : ",heures," heures et ",minutes," minutes.\n")
Extraire des données d'année de mois ou de jour avec les $
x = c("19/10/2019 19:00","19/10/2019 22:12")
x = strptime(x,format="%d/%m/%Y %R")$year +1900 ; print(x)
Autre méthode :
library(lubridate)
month(x)
Forcer l'affichage des graduations indiquant le temps
by = "day", "month" ou "year"
x = c(5.7,7.15,7.25,7.3,7.4)
dates = c("2015-03-01","2015-03-02","2015-03-06","2015-03-12","2015-04-01")
dates = strptime(dates, "%Y-%m-%d")
plot(dates,x,axes=F,col="#FFAA00",pch=16,cex=4,type="o")
axis.POSIXct(1, at=seq(from=min(dates), to=max(dates), by="day"), format="%m-%d", las=2) # force infiquant la date de chaque jour
Un exemple pour aller plus loin.
Cet exemple montre comment :
prendre des dates
afficher une variable en fonction du temps
Changer la forme de l'axe
Calculer une différence de temps entre deux dates
Et sous ggplot2 : normalement, c'est automatique, mais on peut toujours préciser le format temporel avec as.Date.
Exemple:
ggplot(data, aes(x = as.Date(date,"%y/%m/%d"), y=Ma_variable_y))+
geom_point(col="red")
Aller plus loin