我同意这是一个错误,或者至少是一个需要记录的限制:k
for "months" 仅适用于 k=1,2,3,4 和 6。
寻找解决方法,我的第一个想法是:
library(xts)
x <- xts(1:10000, order.by=seq(from=as.Date("1970-01-01"), by=1, len=10000))
index(x)[endpoints(x, on="months", k=6)[c(T,F)]]
给予:
"1970-12-31" "1971-12-31" "1972-12-31"... "1995-12-31" "1996-12-31"
但是当我使用不同的数据集时它会中断:
x <- xts(1:10000, order.by=seq(from=as.Date("1970-07-01"), by=1, len=10000))
这使:
"1971-06-30" "1972-06-30" "1973-06-30" ...
一个稳定的答案是:
dates <- index(x)[endpoints(x, on="months", k=6)]
dates[ as.POSIXlt(dates)$mon==11 ]
(英文:获取每半年的最后一天,只保留12月份的。)
另一种方法是仅使用endpoints(x, on="years")
,然后如果您不喜欢它,请删除最后一个日期。
我猜你想要一年中的“最后一个交易日”或“最后一个采样日”,所以它实际上不会是每年的 12 月 31 日。但是,如果您确实想要每年的特定日期:
index(x)[.indexmon(x)==11 & .indexmday(x)==31]