2

SPX の OHLC リターン シリーズの xts オブジェクトがあるとします ( SPX)

これらの収益を動的にサブセット化して、たとえば、Business Day 9毎月から までの期間をサブセット2 business days before the end of the month化できるようにしたい場合、xts でこれを行う最も効率的な方法は何でしょうか?

.index/xts関数のいくつかの組み合わせをネストして遊んでみました

SPX[.indexmday(SPX)==1]

RQuantLibいくつかの日付機能と同様にlubridate、さまざまなレベルの成功があります。

これを行うためのかなり便利で効率的な方法があると確信しています。アドバイスをいただければ幸いです。

4

1 に答える 1

3

headとに負の値を使用する方法を次に示しますtail

SPX <- getSymbols("^GSPC", src="yahoo", auto.assign=FALSE)
do.call(rbind, lapply(split(SPX, 'months'), function(x) tail(head(x, -2), -9)))

「月」で分割し、各月に関数を適用します。この関数は、 の最後の 2 日間を除くすべてのうち、最初の 9 日間を除くすべてを取得しますxts。最後に、結果を 1 つのオブジェクトrbindにまとめます。xts

編集:

xts::firstandxts::lastの代わりにheadandを使用tailして、毎日以外の頻度で機能させることができます。

do.call(rbind, lapply(split(SPX, 'months'), function(x) {
  first(xts::last(x, "-2 days"), "-9 days")
}))

コメントに対処するための更新:

サブセットに対して他の操作を実行する場合は、少なくとも 1 行のデータがあることを確認する必要があります。特定の月について、xts オブジェクトに 9 日以降、最終日の 2 日より前に日がない場合、上記の無名関数は を返しNULLます。

do.call(rbind, lapply(split(SPX, 'months'), function(x) {
  dat <- first(xts::last(x, "-2 days"), "-9 days")
  if (NROW(dat) > 0) OpCl(dat)
}))

ただし、この場合、OpCl()元の回答の結果を呼び出して同じ結果を得ることができます。

tmp <- do.call(rbind, lapply(split(SPX, 'months'), function(x) {
  first(xts::last(x, "-2 days"), "-9 days")
}))
OpCl(tmp)
于 2013-03-07T02:24:56.370 に答える