如何在 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
我有一个时间序列数据框,如下所示:
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