如何将 R 中多个时间戳的 POSIXct 时间减少到之前的 15 秒间隔

How to reduce POSIXct time to previous 15-second interval for multiple time stamps in R

我有一堆 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 格式的工作不多,也不知道执行此操作的有效方法。任何帮助深表感谢。谢谢。

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 后剩下的秒数。

我维护的包 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"