如何在 R 中将时间序列数据分组为 5 分钟的轮间隔?

How to group Time Series data into round intervals of 5 minutes in R?

我有一个时间序列数据框,如下所示:

  Time                 Source  Value
1 2016-01-20 15:10:04  C04     OPEN
2 2016-01-20 15:09:57  M04     true
3 2016-01-20 15:09:53  M02     true
4 2016-01-20 15:09:53  M03     true
5 2016-01-20 14:44:54  M04     true

现在我想从 00:00:00 开始以 5 分钟的间隔对它们进行分组,这样我就可以得到 0-5-10-15-20 的间隔...等等。间隔将在以后用作组标识符:

  Time                 Source  Value  Group
1 2016-01-20 15:10:04  C04     OPEN   10
2 2016-01-20 15:09:57  M04     true   5
3 2016-01-20 15:09:53  M02     true   5
4 2016-01-20 15:09:53  M03     true   5
5 2016-01-20 14:44:54  M04     true   40

我已经尝试使用 breaks="5 min" 来 cut() 日期,但不是获取开始值和结束值,结果如下所示:

 > table(cut.POSIXt(df.formatted$Time, breaks="5 min"))[1:5]
 2015-12-31 12:49:00 2015-12-31 12:54:00 2015-12-31 12:59:00 2015-12-31 13:04:00 2015-12-31 13:09:00 
              4                   0                   0                   1                  15 

有没有办法告诉 cut() 使用循环时间间隔?我也尝试过使用 xts 包进行分组,但 OHLC 对我的帮助比它更让我感到困惑。我还尝试使用 heR.Misc 包(参见 time.factor documentation 但由于文档不完善,我无法将其正确地设置为 运行。

有人知道如何解决这个问题吗?

首先,您需要安装 "chron" 软件包。此软件包具有 minutes() 功能,可让您节省时间。

我必须将第一列和第二列粘贴在一起,但我认为您不必也这样做。仅使用 tmpTime <- tmp[,1]

library(chron)

tmp <- read.table(text="Time  Source  Value
 2016-01-20 15:10:04  C04     OPEN
 2016-01-20 15:09:57  M04     true
 2016-01-20 15:09:53  M02     true
 2016-01-20 15:09:53  M03     true
 2016-01-20 14:44:54  M04     true", header=T, row.names= NULL)

tmpTime <- paste(tmp[,1], tmp[,2])

group <- seq(0,55,5)

sapply(tmpTime, function(x){
  x <- minutes(x)
  for(i in 2:length(group)){
    if(x < group[i]) {return(group[i-1]); break}
    else if(x >= group[length(group)]) return(group[length(group)])
  }
})

[1] 10  5  5  5 40