2014-12-10 5 views
7

У меня есть следующий кадр данныхПреобразование Unix метку в 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 ... 

Я не могу преобразовать метку времени UNIX в DateTime, используя следующие методы, которые я попытался

> 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")) 

Ошибка в качестве. POSIXlt.character (x, tz, ...): символьная строка не находится в стандартном недвусмысленном формате

> 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" 

Я не уверен, что я делаю неправильно здесь.

+0

@akrun спасибо, это работает, но у вас есть какие-либо идеи, почему это должно быть сделано таким образом? – user3006691

+0

Я думаю, что Emer добавил какое-то объяснение – akrun

ответ

8

Вам необходимо преобразовать из Factor в Character To Number перед использованием as.POSIXct. Функция ожидает целое как UnixTime

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

Я тоже пробовал это и закончил с ошибкой; > head (as.POSIXct (as.character (try $ time), origin = "1970-01-01", tz = "GMT")) Ошибка в as.POSIXlt.character (x, tz, ...) : символьная строка не находится в стандартном недвусмысленном формате – user3006691

2

Это потому, что эпоха не является числовым значением, попробуйте преобразовать его в число, и это работает как чудо!

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

Попробуйте

head(as.POSIXct(as.integer(as.numeric(as.character(try$time))/1000.0), 
origin='1970-01-01', tz="GMT")) 
Смежные вопросы