2014-12-10 16 views
7

Ho il seguente frame di datiConvertire timestamp Unix in datetime

> head(try) 
    creates  time 
1 128.29508 1417392072 
3 236.98361 1417392072 
7 98.45902 1417392072 
9 157.44068 1417392131 
10 227.38333 1417392131 
11 242.03390 1417392131 

> str(try) 
'data.frame': 102968 obs. of 2 variables: 
$ creates: num 128.3 237 98.5 157.4 227.4 ... 
$ time : Factor w/ 26418 levels "1417392071","1417392072",..: 2 2 2 3 3 3 3 3 5 5 ... 

non sono in grado di convertire il timestamp di UNIX in datetime utilizzando i seguenti metodi ho provato

> head(as.POSIXlt(as.numeric(try$time),origin="1970-01-01",tz="GMT")) 
[1] "1970-01-01 00:00:02 UTC" "1970-01-01 00:00:02 UTC" "1970-01-01 00:00:02 UTC" "1970-01-01 00:00:03 UTC" "1970-01-01 00:00:03 UTC" 
[6] "1970-01-01 00:00:03 UTC" 

> head(as.POSIXct(as.character(try$time),tz="GMT")) 

errore come. POSIXlt.character (x, tz, ...): stringa di caratteri non in un formato standard univoco

> head(as.POSIXlt(as.POSIXct(as.vector(as.numeric(try$time)),origin="1970-01-01"))) 
[1] "1970-01-01 00:00:02 UTC" "1970-01-01 00:00:02 UTC" "1970-01-01 00:00:02 UTC" "1970-01-01 00:00:03 UTC" "1970-01-01 00:00:03 UTC" 
[6] "1970-01-01 00:00:03 UTC" 

Non sono sicuro di cosa sto facendo in modo errato qui.

+0

@akrun grazie, questo funziona, ma hai qualche idea sul motivo per cui deve essere fatto in questo modo? – user3006691

+0

Immagino che Emer abbia aggiunto qualche spiegazione – akrun

risposta

8

Devi convertire da Factor a Character To Number prima di utilizzare as.POSIXct. La funzione si aspetta un intero come un Unixtime

head(as.POSIXct(as.numeric(as.character(try$time)),origin="1970-01-01",tz="GMT")) 
+0

Anch'io ci ho provato e ho finito con un errore; > head (as.POSIXct (as.character (try $ time), origin = "1970-01-01", tz = "GMT")) Errore in as.POSIXlt.character (x, tz, ...) : La stringa di caratteri non è in un formato standard non ambiguo – user3006691

2

È perché l'epoca non è numerico, provare a convertirlo in un numero e funziona come meraviglia!

try$time <- as.POSIXct(as.numeric(try$time), origin = '1970-01-01', tz = 'GMT') 
0

Prova

head(as.POSIXct(as.integer(as.numeric(as.character(try$time))/1000.0), 
origin='1970-01-01', tz="GMT")) 
Problemi correlati