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.call
和 rbind
把它重新组合起来。
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 号之间的任何时间。
我想在 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.call
和 rbind
把它重新组合起来。
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 号之间的任何时间。