2009-12-25 18 views
45

Ho più elenchi di misure. In ogni elenco il timestramp è formattato come una stringa ("2009-12-24 21: 00: 07.0") e so che ogni misura nell'elenco è separata da 5 secondi. Voglio combinare tutti i dati in un enorme data.frame in R. In seguito voglio essere in grado di accedere facilmente alla differenza di tempo di due misurazioni, quindi probabilmente dovrei convertire i dati in qualcosa di diverso dai caratteri.Gestire i timestamp in R

Quale formato devo utilizzare per memorizzare i tempi? C'è qualche formato temporale in qualche pacchetto che dovrei usare?

risposta

58

Si desidera che il (standard) POSIXt tipo dalla base R che si può avere in 'forma compatta' come POSIXct (che è essenzialmente un doppio che rappresenta le frazioni di secondo da epoch) o forma, purché in POSIXlt (che contiene sub -elementi). La cosa interessante è che l'aritmetica, ecc sono definiti su questo - vedi help(DateTimeClasses)

esempio rapida:

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> 

Per quanto riguarda la loro lettura in, vedere help(strptime)

Per quanto riguarda la differenza, troppo facile:

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> 

Infine, lo zoo package è un contenitore estremamente versatile e ben documentato per matrice con data/ora associata e indici.

+13

Grazie. Le persone che hanno creato i nomi per le funzioni R sono crudeli. Voglio dire come dovresti indovinare che POSIX ha qualcosa a che fare con il tempo? – Christian

+6

Ma 'help.search (" date time ")' avrebbe scoperto le funzioni adiacenti. –

+3

@DirkEddelbuettel sì, e questo è utile. Ad ogni modo non è una scusa per i nomi sbagliati. Più il codice è leggibile senza la necessità di documentazione, meglio è. – nandinga