我是 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"]
但我收到以下错误:
Error in if (length(c(year, month, day, hour, min, sec)) == 6 && c(year, : missing value where TRUE/FALSE needed
此外:警告消息:
1: In as_numeric(YYYY) : NAs introduced by coercion 2: In as_numeric(YYYY) : NAs introduced by coercion
最佳答案
出现错误是因为您尝试对字符串“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
)。
关于r - 按日期对 xts 文件进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42606634/