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::first
andxts::last
の代わりにhead
andを使用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)