【问题标题】:Converting time interval in R在R中转换时间间隔
【发布时间】:2012-05-28 17:25:52
【问题描述】:

我对 R 的了解和经验有限,请多多包涵。

我有以下形式的持续时间测量:

d+h:m:s.s

例如3+23:12:11.931139,其中 d=天,h=小时,m=分钟,s.s=十进制秒。我想创建这些值的直方图。

有没有一种简单的方法可以将此类字符串输入转换为数字形式,例如秒?我发现的所有信息似乎都针对日期时间对象。

理想情况下,我希望能够在命令行上将数据列表通过管道传输到 R,从而动态创建直方图。

干杯

洛里斯

【问题讨论】:

    标签: r time format intervals


    【解决方案1】:

    基于SO的另一种解决方案:

    op <- options(digits.secs=10)
    z <- strptime("3+23:12:11.931139", "%d+%H:%M:%OS")
    vec_z <- z + rnorm(100000)
    hist(vec_z, breaks=20)
    

    简短说明:首先,我设置选项以显示毫秒。现在,如果你在控制台中输入z,你会得到“2012-05-03 23:12:11.93113”。然后,我将您的字符串解析为日期对象。然后我创建更多日期并绘制直方图。我认为对你来说重要的一步是解析,strptime 应该可以帮助你

    【讨论】:

    • 这正是我所需要的。不知怎的,我忽略了strptime。我实际上并不需要毫秒,因为这些值通常以小时为单位,但很高兴知道如何做到这一点。
    • @loris 很高兴我能帮上忙。如果您的问题因此得到回答,您能否将其标记为已接受,以便将其从未决问题列表中删除?
    【解决方案2】:

    我会这样做:

    str = "3+23:12:11.931139"    
    result = sum(as.numeric(unlist(strsplit(str, "[:\\+]", perl = TRUE))) * c(24*60*60, 60*60, 60, 1))
    > result
    [1] 342731.9
    

    然后,您可以将其包装成一个函数并应用于列表或向量。

    【讨论】:

    • 这很好而且通用,虽然我希望避免自己做数学。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2021-02-16
    • 2014-01-20
    • 2017-09-24
    相关资源
    最近更新 更多