R中的增量时间戳解析(纳秒,微秒,毫秒)

时间:2019-03-11 15:43:38

标签: r time timestamp datetime-format timedelta

我正在R中工作,需要将时间戳从我认为的纳秒精度更改为微秒精度或毫秒精度(我认为它必须是毫秒或仅十进制小数点后三位)。

Example of two of the timestamps

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

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

此外,您如何建议处理D?我以为我应该使用gsub("D", "-", df$timestamp),然后像lubridate这样的程序包就可以解析时间戳了,甚至可以达到纳秒精度?

2 个答案:

答案 0 :(得分: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"

答案 1 :(得分:2)

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

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

如您所见,您需要将D的{​​{1}}更改并在末尾添加T,但这很容易完成,就像symbolrush向您展示的那样。

00:00

在此处查看更多信息:

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