首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据考虑工作日的日期序列对xts进行子集

如何根据考虑工作日的日期序列对xts进行子集
EN

Stack Overflow用户
提问于 2016-08-21 06:48:02
回答 1查看 318关注 0票数 1

我使用一个xts序列来替换as.Date对象:

代码语言:javascript
复制
library("quantmod")

getSymbols("AAPL",from="2003-01-01")
# indx sequence
indx <- seq(as.Date('2003-03-31'), length.out=200, by='4 weeks')

SELECT <- AAPL[paste(indx)]

如果您看一看SELECT中的最后2行,我会发现它从2016-06-06跳到了2016-08-01,这并不是4周。它缺少2016-07-04,但由于这不是一个工作日,所以它跳过了它。如果SELECT不是工作日,那么如何返回返回下一个可用工作日的indx?在这个例子中,它应该返回2016-07-05..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-21 16:58:54

在工作日,我猜您是指AAPL的一个交易日,在这种情况下,您的工作日实际上是AAPL安全的时间指数。

第一种使用事实日期的方法可以增加1:

代码语言:javascript
复制
indx <- seq(as.Date('2003-03-31'), length.out=200, by='4 weeks')
indx <- indx[indx < as.Date(end(AAPL))]
while(!all(indx %in% as.Date(index(AAPL)))) {
    # You ask for the next available business day:
    indx[!indx %in% as.Date(index(AAPL))] <- indx[!indx %in% as.Date(index(AAPL))] + 1
    # Careful that the last indx value does not go past as.Date(end(AAPL))
    if (indx[length(indx)] > as.Date(end(AAPL))) {
        indx[length(indx)] <- as.Date(end(AAPL))
    }
}

SELECT <- AAPL[indx]
tail(SELECT)
# AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
# 2016-03-14    101.91    102.91   101.78     102.52    25076100     101.35055
# 2016-04-11    108.97    110.61   108.83     109.02    29407500     107.77640
# 2016-05-09     93.00     93.77    92.59      92.79    32936400      92.29005
# 2016-06-06     97.99    101.89    97.55      98.63    23292500      98.09858
# 2016-07-05     95.39     95.40    94.46      94.99    27705200      94.47819
# 2016-08-01    104.41    106.15   104.41     106.05    38167900     105.47860

您可能还会发现,通过timeDate包解决方案对于业务日期类型的子设置更为有用。例如http://stackoverflow.com/questions/13673895/r-time-series-data-daily-only-working-days

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39061563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档