あなたは、それぞれcummax()
とcummin()
を使用して、累積最大/最小を計算することができます。これらの機能を1日ごとに適用するだけです。 split()
データを毎日のグループに分け、各グループに以下の機能を適用してから、rbind()
のデータを一緒に戻してください。
ここでは、xtsパッケージの日次データを使用した再現可能な例を示します。
library(xts)
set.seed(21)
tm <- timeBasedSeq('2017-07-14/2017-07-15/M')
x <- xts(20*cumprod(1+rnorm(length(tm), 0, 0.0025)), tm)
colnames(x) <- "price"
aggfun <- function(x) {
stopifnot(ncol(x) > 0)
# remove potential column name
colnames(x) <- NULL
r <- xts(cbind(Open = rep(x[1], nrow(x)),
High = cummax(x),
Low = cummin(x),
Close = x), index(x))
r
}
y <- do.call(rbind, lapply(split(x, "day"), aggfun))
のような次のルックスに1日からの出力:
y[1439:1442]
# Open High Low Close
# 2017-07-14 23:58:00 20.03965 25.02193 19.60128 23.73810
# 2017-07-14 23:59:00 20.03965 25.02193 19.60128 23.71598
# 2017-07-15 00:00:00 23.73816 23.73816 23.73816 23.73816
# 2017-07-15 00:01:00 23.73816 23.73816 23.71164 23.71164
感謝します。スプリット機能では、1日ではなく、小さなタイプミスがあります。 – PDM