2015-05-25 14 views
5

Ho la seguente data.frame:Converti con timestamp epoca di serie temporali con millisecondi in R

df <- data.frame(timestamp=c(1428319770511, 1428319797218, 1428319798182, 1428319803327, 1428319808478), 
       session=c("A","A","B","A","A")) 

mi piacerebbe convertire questo frame di dati per una serie temporale e lavorare su Ora di Windows più corto di un secondo. Ho già provato zoo e xts, ma ho trovato difficile rappresentare le epoche volte come date. Ecco quello che ho già provato:

df$date<-strptime(as.POSIXct(df$timestamp, origin="1970-01-01"),format="%Y-%m-%d %H:%M:%OS") 

che restituiscono AN. Chiamando questo:

df$date<-strptime(as.POSIXct(df$timestamp/1000, origin="1970-01-01"),format="%Y-%m-%d %H:%M:%OS") 

Funziona ma non contiene i dati di millisecondi. Ho anche provato a giocare con options(digits.secs=3) ma senza fortuna.

Immagino di dover colpire un piccolo muro qui con la gestione di R di millisecondi ma qualsiasi idea sarebbe molto apprezzata.

--- EDIT ---

Ok, grazie alla risposta di Giosuè e un commento qui Convert UNIX epoch to Date object in R da @Dirk Eddelbuettel, dividendo per 1000 non tronca i dati. Quindi, questo funziona:

options(digits.secs = 3) 
df$date<-as.POSIXct(df$timestamp/1000, origin="1970-01-01", tz="UTC") 

che restituisce:

timestamp  session date  
1428319770511 A  2015-04-06 14:29:30.510 
1428319797218 A  2015-04-06 14:29:57.217 
1428319798182 B  2015-04-06 14:29:58.181 
1428319803327 A  2015-04-06 14:30:03.326 
1428319808478 A  2015-04-06 14:30:08.477 

risposta

3

vostri timestamp sono in millisecondi. È necessario convertirli in secondi per poterli utilizzare con as.POSIXct. E non ha senso chiamare strptime su un vettore POSIXct.

Inoltre, è buona norma impostare il fuso orario, anziché lasciarlo impostato su "".

df$datetime <- as.POSIXct(df$timestamp/1000, origin="1970-01-01", tz="UTC") 
options(digits.secs=6) 
df 
#  timestamp session    datetime 
# 1 1.42832e+12  A 2015-04-06 11:29:30.510 
# 2 1.42832e+12  A 2015-04-06 11:29:57.217 
# 3 1.42832e+12  B 2015-04-06 11:29:58.181 
# 4 1.42832e+12  A 2015-04-06 11:30:03.326 
# 5 1.42832e+12  A 2015-04-06 11:30:08.477 

io non sono sicuro perché non si è visto risoluzione millisecondo ...

Problemi correlati