将具有纪元时间戳的数据帧转换为 R 中以毫秒为单位的时间序列
Convert data frame with epoch timestamps to time-series with milliseconds in R
我有以下 data.frame:
df <- data.frame(timestamp=c(1428319770511, 1428319797218, 1428319798182, 1428319803327, 1428319808478),
session=c("A","A","B","A","A"))
我想将此数据帧转换为时间序列,并按 windows 短于一秒的时间工作。我已经尝试过 zoo
和 xts
,但我发现很难将纪元时间表示为日期。
这是我已经尝试过的:
df$date<-strptime(as.POSIXct(df$timestamp, origin="1970-01-01"),format="%Y-%m-%d %H:%M:%OS")
哪个return NA。调用此:
df$date<-strptime(as.POSIXct(df$timestamp/1000, origin="1970-01-01"),format="%Y-%m-%d %H:%M:%OS")
有效但不包含毫秒数据。
我也尝试玩 options(digits.secs=3)
但没有运气。
我想我在这里用 R 的毫秒处理遇到了一堵小墙,但任何想法都将不胜感激。
---编辑---
好的,感谢 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")
哪个 returns:
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
您的时间戳以毫秒为单位。您需要将它们转换为秒才能将它们与 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
我不确定您为什么看不到毫秒分辨率...
我有以下 data.frame:
df <- data.frame(timestamp=c(1428319770511, 1428319797218, 1428319798182, 1428319803327, 1428319808478),
session=c("A","A","B","A","A"))
我想将此数据帧转换为时间序列,并按 windows 短于一秒的时间工作。我已经尝试过 zoo
和 xts
,但我发现很难将纪元时间表示为日期。
这是我已经尝试过的:
df$date<-strptime(as.POSIXct(df$timestamp, origin="1970-01-01"),format="%Y-%m-%d %H:%M:%OS")
哪个return NA。调用此:
df$date<-strptime(as.POSIXct(df$timestamp/1000, origin="1970-01-01"),format="%Y-%m-%d %H:%M:%OS")
有效但不包含毫秒数据。
我也尝试玩 options(digits.secs=3)
但没有运气。
我想我在这里用 R 的毫秒处理遇到了一堵小墙,但任何想法都将不胜感激。
---编辑---
好的,感谢 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")
哪个 returns:
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
您的时间戳以毫秒为单位。您需要将它们转换为秒才能将它们与 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
我不确定您为什么看不到毫秒分辨率...