【问题标题】:Delta Timestamp Parsing in R (Nanoseconds, Microseconds, Milliseconds)R中的Delta时间戳解析(纳秒,微秒,毫秒)
【发布时间】:2019-08-01 23:37:47
【问题描述】:

我在 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


    【解决方案1】:

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

    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"
    

    【讨论】:

    • 我该如何修改这段代码,如果我想要三位数的精度,那么它会像 2019-03-02D00:00:12.214 这样以毫秒为单位呈现?
    • 谢谢!您编辑的代码format(dt, "%Y-%m-%d %H:%M:%OS3") 就像一个魅力。我很好奇另外两行代码的用途:dt - 1E-310E-3 部分。我将前几行的纳秒时间放入毫秒转换器中,第一行没有1E-3 的代码就在现场。只是好奇其他两个调整发生了什么。
    • 我遇到的唯一其他问题是,此时它不是日期时间对象,而是被视为字符。我不确定如何将日期转换为适当的日期时间对象。
    【解决方案2】:

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

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

    如您所见,您需要将D 更改为T 并在末尾添加00:00,但正如symbolrush 向您展示的那样,这很容易做到。

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

    在这里查看更多:

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

    【讨论】:

    • 感谢您的回答。你们都很棒。
    猜你喜欢
    • 2013-08-25
    • 2023-03-17
    • 1970-01-01
    • 2013-04-18
    • 2012-02-12
    • 2022-06-13
    • 2011-10-18
    • 2015-04-17
    相关资源
    最近更新 更多