如何将 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"
我有一堆 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"