Delta时间戳解析为R(纳秒,微秒,毫秒)

问题描述 投票:2回答:2

我在R工作,需要将时间戳从我认为的纳秒级精度更改为微秒级精度或毫秒级精度(我认为它需要是毫秒或仅超过小数的三位数)。

Example of two of the timestamps

"2019-03-02D00:00:12.214841000"

部分困难是我不认为有像lubridate这样的包来处理它。我不确定是否需要使用正则表达式来提取秒,然后将纳秒转换为毫秒。我愿意接受任何建议。

另外,您如何推荐处理D?我以为我应该使用gsub("D", "-", df$timestamp),然后像lubridate那样的包可以解析时间戳,即使是纳秒精度?

r time timestamp datetime-format timedelta
2个回答
3
投票

你可以在as.POSIXct之后使用gsub("D", " ", x)

as.POSIXct(gsub("D", " ", "2019-03-02D00:00:12.214841000"))

之后您仍然可以使用毫秒精度:

dt <- as.POSIXct(gsub("D", " ", "2019-03-02D00:00:12.214841000"))
dt
[1] "2019-03-02 00:00:12 CET"
for(i in 1:1000) dt <- dt - 0.001
dt
[1] "2019-03-02 00:00:11 CET"

如果要显示这些毫秒,可以使用format

format(dt, "%Y-%m-%d %H:%M:%OS3")
[1] "2019-03-02 00:00:11.214"
format(dt - 1E-3, "%Y-%m-%d %H:%M:%OS3")
[1] "2019-03-02 00:00:11.213"
format(dt - 10E-3, "%Y-%m-%d %H:%M:%OS3")
[1] "2019-03-02 00:00:11.204"

2
投票

您可以使用与nanotime相关的库integer64(真正的高精度浮点数)

library(nanotime)
x<-nanotime("2019-03-02T00:00:12.214841000+00:00")

正如你所看到的,你需要为D更改T并在结尾添加00:00to,但这很容易就像symbolrush向你展示的那样。

x<-nanotime(paste0(gsub("D", "T", "2019-03-02D00:00:12.214841000"), "+00:00"))

在这里查看更多:

http://dirk.eddelbuettel.com/code/nanotime.html

© www.soinside.com 2019 - 2024. All rights reserved.