R:使用 XTS 的特定月份的第三个星期三

R: 3rd Wedndesday of a specific month using XTS

我想在 R 中检索特定月份的第三个星期三

这不完全是 How to figure third Friday of a month in R 的重复问题,因为我想使用 Base R 或 XTS。

数据在x:

library(xts)
x = xts(1:100, Sys.Date()+1:100)

我可以使用以下方法检索星期三:

wed=x[.indexwday(x) %in% 3]
> wed
           [,1]
2015-09-30    6
2015-10-07   13
2015-10-14   20
2015-10-21   27
2015-10-28   34
2015-11-04   41
2015-11-11   48
2015-11-18   55
2015-11-25   62
2015-12-02   69
2015-12-09   76
2015-12-16   83
2015-12-23   90
2015-12-30   97
> 

我还没有想出如何使用 xts 获得这个 wed 向量每个月的第三次观察,但一定有办法。

third=wed[head(endpoints(wed, "months") + 3, -3)]

returns 一个错误的结果。

我已经阅读了 xts 文档,但在那里找不到合适的函数。

如有任何帮助,我们将不胜感激。

拿你的 wed 对象,按月拆分,然后 select 第 3 行。然后用 do.callrbind 把它重新组合起来。

R> # 3rd or last available Wednesday
R> wedList <- split(wed, "months")
R> do.call(rbind, lapply(wedList, function(x) x[min(nrow(x),3),]))
#            [,1]
# 2015-09-30    6
# 2015-10-21   27
# 2015-11-18   55
# 2015-12-16   83
R> # no observation if 3rd Wednesday isn't available
R> do.call(rbind, lapply(wedList, function(x) if(nrow(x) < 3) NULL else x[3,]))
#            [,1]
# 2015-10-21   27
# 2015-11-18   55
# 2015-12-16   83

为什么不只是

library(xts)
x = xts(1:3650, Sys.Date()+1:3650)

x[.indexwday(x) == 3  & 
    .indexmday(x) >= 15 & 
    .indexmday(x) <= 21
  ]

如果第一个星期三是 1 号,那么第三个星期三是 15 号。

如果第一个星期三在 7 号,那么第三个星期三在 21 号。

所以在 15 号和 21 号之间的任何时间。