head
这是一种对and使用负值的方法tail
:
SPX <- getSymbols("^GSPC", src="yahoo", auto.assign=FALSE)
do.call(rbind, lapply(split(SPX, 'months'), function(x) tail(head(x, -2), -9)))
它按“月”分割,然后对每个月应用一个函数。该函数获取除前 9 天之外的所有xts
. 最后,rbind
将结果组合成一个xts
对象。
编辑:
您可以使用xts::first
andxts::last
代替head
andtail
以便它可以使用除每日以外的频率。
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)