我是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
答案 0 :(得分:2)
出现错误是因为您试图将日期时间子集化为字符串"L/J"
,这对子集化操作没有意义。此外,您应该注意L
或J
不会返回NA
,这可能会发生在您的数据边界上,否则您将收到错误。
请尝试此操作以避免错误:
if (is.na(L) || is.na(J)) stop("Not a valid date range.")
V <-IRV[paste0(L,"/", J), ]
您希望使用窗口小心处理边缘情况。
当你说“我想要的东西是500天,然后将它向前移动30天”时,我并不完全遵循你的意思。如果您的意思是计算滚动数据窗口,则可以使用rollapplyr
(请参阅?rollapplyr
)。