web-dev-qa-db-fra.com

Gérer les horodatages dans R

J'ai plusieurs listes de mesures. Dans chaque liste, l'horodatage est formaté 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 de 5 secondes. Je veux combiner toutes les données dans un énorme data.frame en R. Ensuite, je veux pouvoir 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 stocker les heures? Y a-t-il un format d'heure dans un paquet que je devrais utiliser?

48
Christian

Vous voulez le type (standard) POSIXt de la base R qui peut être eu sous 'forme compacte' comme POSIXct (qui est essentiellement un double représentant des secondes fractionnaires depuis l'époque) ou comme forme longue dans POSIXlt (qui contient des sous-éléments). Ce qui est cool, c'est que l'arithmétique, etc. sont définis à ce sujet - voir help(DateTimeClasses)

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> 

Quant à les lire, voir help(strptime)

Quant à la différence, 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 package Zoo est un conteneur extrêmement polyvalent et bien documenté pour la matrice avec les indices de date/heure associés.

65
Dirk Eddelbuettel