【问题标题】:How to reduce POSIXct time to previous 15-second interval for multiple time stamps in R如何将 POSIXct 时间减少到 R 中多个时间戳的前 15 秒间隔
【发布时间】:2018-01-25 18:27:55
【问题描述】:

我有一堆时间戳(采用 POSIXct 格式。以下是我拥有的时间戳的一些示例:

2017-01-20 16:44:02
2017-01-20 17:14:59
2017-01-20 17:17:21

我正在尝试将时间戳减少到之前的 15 秒间隔(00:00、00:15、00:30、00:45),因此以下时间戳将如下所示:

2017-01-20 16:44:02 -> 2017-01-20 16:44:00
2017-01-20 17:14:59 -> 2017-01-20 17:14:45
2017-01-20 17:17:21 -> 2017-01-20 17:17:15

我对 POSIXct 格式的工作不多,也不知道一种有效的方法来做到这一点。任何帮助深表感谢。谢谢。

【问题讨论】:

    标签: r datetime intervals posixct


    【解决方案1】:

    POSIXt 值存储为自起始日期 (1970-01-01) 以来的秒数。您可以使用该事实和一些模数算术来四舍五入您的值。这是一个可以提供帮助的函数

    round_15 <- function(x) {
      xs <- as.numeric(x)
      x - xs %% 15
    }
    
    x <- as.POSIXct(c("2017-01-20 16:44:02","2017-01-20 17:14:59","2017-01-20 17:17:21"))
    x
    # [1] "2017-01-20 16:44:02 EST" "2017-01-20 17:14:59 EST"
    # [3] "2017-01-20 17:17:21 EST"
    round_15(x)
    # [1] "2017-01-20 16:44:00 EST" "2017-01-20 17:14:45 EST"
    # [3] "2017-01-20 17:17:15 EST"
    

    基本上,我们只是减去除以 15 后剩下的秒数。

    【讨论】:

      【解决方案2】:

      我维护的包datetimeutils有一个函数roundPOSIXt

      timestamps <- as.POSIXct(c("2017-01-20 16:44:02",
                                 "2017-01-20 17:14:59",
                                 "2017-01-20 17:17:21"))
      
      library("datetimeutils")
      roundPOSIXt(timestamps, "15 sec")
      
      ## [1] "2017-01-20 16:44:00 CET" "2017-01-20 17:14:45 CET"
      ## [3] "2017-01-20 17:17:15 CET"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-04
        • 2023-03-16
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多