1 分間の時間枠で発生するデータの間隔を表す data.frame を取る関数を作成しました。この関数の目的は、これらの 1 分間隔を取り、より長い間隔に変換することです。たとえば、1 分が 5 分、60 分などになります。データ セット自体には、データにギャップが生じる可能性があります。つまり、時間のジャンプがあるため、これらの不良データの発生に対応する必要があります。私は動作するように見える次のコードを書きましたが、大規模なデータ セットでのパフォーマンスはまったくひどいものです。
どうすればこれをスピードアップできるかについて、誰かがいくつかの提案を提供してくれることを願っています。下記参照。
compressMinute = function(interval, DAT) {
#Grab all data which begins at the same interval length
retSet = NULL
intervalFilter = which(DAT$time$min %% interval == 0)
barSet = NULL
for (x in intervalFilter) {
barEndTime = DAT$time[x] + 60*interval
barIntervals = DAT[x,]
x = x+1
while(x <= nrow(DAT) & DAT[x,"time"] < barEndTime) {
barIntervals = rbind(barIntervals,DAT[x,])
x = x + 1
}
bar = data.frame(date=barIntervals[1,"date"],time=barIntervals[1,"time"],open=barIntervals[1,"open"],high=max(barIntervals[1:nrow(barIntervals),"high"]),
low=min(barIntervals[1:nrow(barIntervals),"low"]),close=tail(barIntervals,1)$close,volume=sum(barIntervals[1:nrow(barIntervals),"volume"]))
if (is.null(barSet)) {
barSet = bar
} else {
barSet = rbind(barSet, bar)
}
}
return(barSet)
}
編集:
以下は私のデータの行です。各行は 1 分間隔を表します。これを、これらの 1 分間隔の集計である任意のバケット、つまり 5 分、15 分、60 分、240 分などに変換しようとしています。
date time open high low close volume
2005-09-06 2005-09-06 16:33:00 1297.25 1297.50 1297.25 1297.25 98