子集xts文件按日期

时间:2017-03-05 09:28:00

标签: r subset xts

我是R的新编码,发现自己陷入困境。我的文件由高频股票指数数据组成,并将其转换为xts文件。 见下文(左列是日期和时间,右栏是日内返回):

2007-01-02 09:00:00  0.000000e+00

2007-01-02 09:01:00  2.670405e-05

2007-01-02 09:02:00  1.387629e-03

2007-01-02 09:03:00 -1.866841e-04

2007-01-02 09:04:00 -3.201110e-04

2007-01-03 09:00:00 0,0000000000

2007-01-03 09:01:00 -1.321929e-04

2007-01-03 09:02:00 -1.586546e-04

2007-01-03 09:03:00  7.665975e-04

2007-01-03 09:04:00 -5.284993e-05

2007-01-03 09:05:00 -2.907246e-04

我的数据超过五年,我想要的是将其分配500天,然后在循环中向前移动30天。但是,循环本身并不需要,但是如何构建这种函数的帮助将受到高度赞赏。

我使用了以下函数,其中我的数据集名为“DIRV”,即日内回报的总和:

b<-head(DIRV, n=500)

L<-as.Date(index(b)[1])

J<-as.Date(index(b)[500])

V<-IRV["L/J"]

但是我收到以下错误:

  

错误if(长度(c(年,月,日,小时,分钟,秒))== 6&amp;&amp; c(年份,:缺少值需要TRUE / FALSE

另外:警告信息:

  

1:在as_numeric(YYYY)中:强制2引入的NA:In   as_numeric(YYYY):由强制引入的NA

1 个答案:

答案 0 :(得分:2)

出现错误是因为您试图将日期时间子集化为字符串"L/J",这对子集化操作没有意义。此外,您应该注意LJ不会返回NA,这可能会发生在您的数据边界上,否则您将收到错误。

请尝试此操作以避免错误:

if (is.na(L) || is.na(J)) stop("Not a valid date range.")
V <-IRV[paste0(L,"/", J), ]

您希望使用窗口小心处理边缘情况。

当你说“我想要的东西是500天,然后将它向前移动30天”时,我并不完全遵循你的意思。如果您的意思是计算滚动数据窗口,则可以使用rollapplyr(请参阅?rollapplyr)。