r - 按日期对 xts 文件进行子集化

标签 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"]

但我收到以下错误:

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”的日期时间进行子集化,这对子集化操作没有意义。另外,您应该注意 LJ 不要返回 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/

相关文章:

r - 将矩阵添加到绘图中?

r - 当需要在 r 中计算每个子集时避免 for 循环

r - 通过匹配列和值 R 对数据帧进行子集和分组

R : read timeseries data using xts package

R 中 xts 的回归

java - 无法使用 R 连接 MySQL

R-小鼠-机器学习 : re-use imputation scheme from train to test set

r - 如何过滤掉不同(未指定)列中包含两个特定字符串的行?

r - 使用 NA 将时间序列转换为季度

r - 如何计算 R 中增加时间窗口的方法