首页 > 解决方案 > 每个季度执行相等的天数 R 'xts'

问题描述

假设我有以下数据集:

标准普尔 500 指数的每日观察和季度公共债务总额。本季度的观察是在时间

xxxx-01-01
xxxx-04-01
xxxx-07-01
xxxx-10-01

周末、节假日等非交易日用NA表示

2020-01-01 NA
2020-01-02 3257.85
2020-01-02 3234.85
.
.
.
.
2020-03-31 2584.59

这将在每个季度产生不相等的观察量。我的问题是如何删除一定数量的日期,以便在每个季度内我将有 66 个 S&P500 观察值?

标签: rdataframetime-seriesxtsmidasr

解决方案


我们可以将索引转换为yearqtr(from zoo),使用它为前 66 个观察值创建逻辑索引

xt1[ave(seq_along(index(xt1)), as.yearqtr(index(xt1)), FUN = 
        seq_along) <= 66]

正如评论中提到的@G.Grothendieck,这个想法是首先删除 NA 元素

xt2 <- na.omit(xt1)

然后,计算min每个季度的最大元素数

n <- min(tapply(seq_along(index(xt1)), as.yearqtr(index(xt1)), FUN = length))

在第一个代码块中使用它

xt2[ave(seq_along(index(xt2)), as.yearqtr(index(xt2)), FUN = 
        seq_along) <= n]

推荐阅读