簡體   English   中英

將具有紀元時間戳的數據幀轉換為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"))

我想將此數據框轉換為時間序列,並在短於一秒的時間窗口上工作。 我已經嘗試過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的處理毫秒來打一個小牆,但任何想法都會非常感激。

- -編輯 - -

好的,感謝Joshua的回答和評論,這里 @jirk Eddelbuettel的UNIX紀元轉換為R中Date對象 ,除以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

您的時間戳以毫秒為單位。 您需要將它們轉換為秒,以便能夠將它們與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

我不確定你為什么沒有看到毫秒級的分辨率......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM