En pratique, il arrive souvent qu'on travaille avec les dates. Pensez seulement à la variable date de naissance qu'on retrouve dans toutes les bases de données.
La fonction qui nous donne la date courante dans R est la suivante:
Sys.Date()
Celle qui nous donne l'heure;
Sys.time()
Assignons le temps actuel à la variable time_1
time_1 <- Sys.time()
Bien évidemment, on peut appliquer des aditions et soustractions aux dates
Sys.Date()+1 # pour la date de demain
Sys.Date()- 1 # pour la date d'hier
Toutefois, les mêmes opérations se font par secondes lorsqu'on utilise Sys.time()
time_1
time_1+1
time_1-60
Lorsqu'on veut soustraire une heure à notre temps, on soustrait alors 3600 secondes!
time_1+3600
Lorsque le résultat apparait à l'écran, à première vue, nous avons l'impression que nous obtenons un type caractère. Vérifions alors le type avec la fonction class
class(Sys.Date())
On voit bien que le type du résultat obtenu est bien date
. Mai pour le temps, nous obtenons toute autre chose.
class(Sys.time())
Ce qu'on obtient s'appelle un objet "POSIXct". On peut considérer cela comme numérique, et ce temps change numériquement en secondes depuis 1970.
Vérifions cela en forçant le format avec la fonction as.numeric
as.numeric(Sys.time())
Alors que si nous forçons un format de type caractère;
as.character(Sys.time())
Nous obtenons presque le même résultat qu'au début, mais cette fois avec le type caractère.
dates_2sem<-Sys.Date()- 1:10
dates_2sem
Sys.setlocale()
weekdays(dates_2sem)
Si l'on veut afficher en français, nous devons alors changer l'affichage local. Un package appelé lubridate
nous permet de le faire facilement
require("lubridate")
Sys.setlocale(locale="fr_FR.UTF-8")
weekdays(dates_2sem)
Et les mois avec la fonction months
months(dates_2sem)
On se rappelle de la fonction seq
qui sert à générer une séquence d'objets incrémentés d'une unité quelconque. Utilisons cette fonction afin de générer toutes les dates du jour entre deux dates données.
Par exemple entre la date du premier cours et la date du dernier cours;
seq(from = as.Date("06/09/17", "%d/%m/%y"), to = as.Date("13/12/17","%d/%m/%y"), by = "day")
Et si nous voulions toutes les dates de chaque cours (à chaque semaine)
seq(from = as.Date("06/09/17", "%d/%m/%y"), to = as.Date("13/12/17","%d/%m/%y"), by = "week")
Faites la même chose pour les dates de démo par exemple, sachant la première démo avait commencé le 19 septembre
seq(from = as.Date("19/09/17", "%d/%m/%y"), to = as.Date("12/12/17","%d/%m/%y"), by = "week")
time_2<-Sys.time()
time_2 - time_1
L'aute option est d'utiliser la fonctin difftime
difftime(time_1, time_2)
difftime(time_2, time_1)
On peut ajouter l'argument units
afin d'afficher les unités voulues
difftime(time_2, time_1, units='sec')
Si l'on veut seulement le résultat en chiffre, on peut le transformer en valeur numérique tel que nous avons appris
as.numeric(difftime(time_2, time_1, units='sec'))
Toutes ces fonctions de dates sont importantes lorsqu'on veut travailler sur des problèmes traitant les séries temporelles par exemple