2017-07-14 6 views
1

私はxtsで分時報を持っています。 OHLCを日の目の開始から私の時系列の各分まで得るためのエレガントな方法があるかどうかは疑問です。例:分2017-07-14 12:29私は2017-07-14 08:00のオープン、2017-07-14 12:29のクローズ、2017-07-07の期間の最小/ 14 08:00〜2017-07-14 12:29。 私の時間セリエは、08:00〜22:00(841分)に満員です。 私はループをすることを考えていますが、よりエレガントな方法があると思います。パッケージ - 1日に1分以上の分量

おかげ

ピエール

答えて

1

あなたは、それぞれ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 
+0

感謝します。スプリット機能では、1日ではなく、小さなタイプミスがあります。 – PDM

関連する問題