将具有纪元时间戳的数据帧转换为R中具有毫秒的时间序列

时间:2015-05-25 12:02:20

标签: r time-series xts zoo

我有以下data.frame:

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

我希望将此数据框转换为时间序列,并在短于一秒的时间窗口上工作。我已经尝试了zooxts,但我发现很难将时代表示为日期。 这是我已经尝试过的:

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

哪个返回NAs。打电话给:

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

可以使用,但不包含毫秒数据。 我也试过玩options(digits.secs=3),但没有运气。

我想我已经在这里用R&#39处理毫秒的小墙,但任何想法都会受到高度赞赏。

--- --- EDIT

好的,感谢Joshua的回答和@Dirk Eddelbuettel的Convert UNIX epoch to Date object in R评论,除以1000并不截断数据。所以这有效:

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

返回:

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

1 个答案:

答案 0 :(得分:3)

您的时间戳以毫秒为单位。您需要将它们转换为秒才能将它们与as.POSIXct一起使用。在POSIXct向量上调用strptime没有意义。

此外,最好明确设置时区,而不是将其设置为""

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

我不确定你为什么没有看到毫秒级的分辨率......