48 votes

Traiter les timestamps en R

J'ai plusieurs listes de mesures. Dans chaque liste, l'horodatage est formulé sous forme de chaîne ("2009-12-24 21:00:07.0") et je sais que chaque mesure de la liste est séparée par 5 secondes. Je veux combiner toutes les données dans un énorme data.frame dans R. Ensuite, je veux être en mesure d'accéder facilement à la différence de temps de deux mesures, donc je devrais probablement convertir les données en quelque chose de différent des caractères.

Quel format dois-je utiliser pour enregistrer les heures ? Existe-t-il un format de temps dans un paquet que je devrais utiliser ?

66voto

Dirk Eddelbuettel Points 134700

Vous voulez le (standard) POSIXt type de la base R qui peut être obtenu sous forme compacte en tant qu'album. POSIXct (qui est essentiellement un double représentant les secondes fractionnelles depuis l'époque) ou sous forme longue dans POSIXlt (qui contient des sous-éléments). Ce qui est cool, c'est que les fonctions arithmétiques, etc. sont définies sur cette base -- cf. help(DateTimeClasses)

Un exemple rapide :

R> now <- Sys.time()
R> now
[1] "2009-12-25 18:39:11 CST"
R> as.numeric(now)
[1] 1.262e+09
R> now + 10  # adds 10 seconds
[1] "2009-12-25 18:39:21 CST"
R> as.POSIXlt(now)
[1] "2009-12-25 18:39:11 CST"
R> str(as.POSIXlt(now))
 POSIXlt[1:9], format: "2009-12-25 18:39:11"
R> unclass(as.POSIXlt(now))
$sec
[1] 11.79

$min
[1] 39

$hour
[1] 18

$mday
[1] 25

$mon
[1] 11

$year
[1] 109

$wday
[1] 5

$yday
[1] 358

$isdst
[1] 0

attr(,"tzone")
[1] "America/Chicago" "CST"             "CDT"            
R>

Pour les lire, voir help(strptime)

Quant à la différence, c'est facile aussi :

R> Jan1 <- strptime("2009-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
R> difftime(now, Jan1, unit="week")
Time difference of 51.25 weeks
R>

Enfin, le forfait zoo est un conteneur extrêmement polyvalent et bien documenté pour les matrices avec des indices de date/heure associés.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X