我正在R中工作,需要将时间戳从我认为的纳秒精度更改为微秒精度或毫秒精度(我认为它必须是毫秒或仅十进制小数点后三位)。
Example of two of the timestamps
"2019-03-02D00:00:12.214841000"
部分困难是我认为没有像lubridate
这样的程序包可以处理它。我不确定是否需要使用正则表达式提取秒数,然后将纳秒转换为毫秒。我愿意接受任何建议。
此外,您如何建议处理D
?我以为我应该使用gsub("D", "-", df$timestamp)
,然后像lubridate
这样的程序包就可以解析时间戳了,甚至可以达到纳秒精度?
答案 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
在此处查看更多信息: