使用 setkeyv 参数在 R 问题中将 xts 转换为 data.table

Posted

技术标签:

【中文标题】使用 setkeyv 参数在 R 问题中将 xts 转换为 data.table【英文标题】:Converting xts to data.table in R -issue with the setkeyv argument 【发布时间】:2021-08-05 15:55:09 【问题描述】:

我有xts格式的数据如下:

                     EURAUD  EURCAD  EURCHF
2019-03-05 00:00:00 1.59898 1.50877 1.13258
2019-03-05 00:01:00 1.59893 1.50870 1.13252
2019-03-05 00:02:00 1.59888 1.50888 1.13253

由于不理解 setkeyv 参数,我需要一些帮助来将 xts 转换为 data.table

structure(c(1.59898, 1.59893, 1.59888, 1.59886, 1.59894, 1.50877, 1.5087, 1.50888, 1.50879, 1.50885, 
1.13258, 1.13252, 1.13253, 1.13254, 1.13249), class = c("xts", "zoo"), index = 
structure(c(1551733200, 1551733260, 1551733320, 1551733380, 1551733440), tzone = "", tclass = 
c("POSIXct", "POSIXt")), .Dim = c(5L, 3L), .Dimnames = list(NULL, c("EURAUD", "EURCAD", "EURCHF")))

EDIT 在其他函数中使用data.table(从xts 转换为data.table 后)时出现以下错误。

> library(highfrequency)
> rc = rCov(rData = dt1, makeReturns = TRUE)
Error in setkeyv(x, cols, verbose = verbose, physical = physical) : 
some columns are not in the data.table: DT

【问题讨论】:

as.data.table 直接与 xts 一起使用,在 v1.14.0 上测试:升级 data.table?见rdocumentation.org/packages/data.table/versions/1.14.0/topics/… 【参考方案1】:

我们可以使用

library(xts)
library(data.table)
dt1 <- as.data.table(fortify.zoo(xt1))

-输出

str(dt1)
Classes ‘data.table’ and 'data.frame':  5 obs. of  4 variables:
 $ Index : POSIXct, format: "2019-03-04 16:00:00" "2019-03-04 16:01:00" "2019-03-04 16:02:00" "2019-03-04 16:03:00" ...
 $ EURAUD: num  1.6 1.6 1.6 1.6 1.6
 $ EURCAD: num  1.51 1.51 1.51 1.51 1.51
 $ EURCHF: num  1.13 1.13 1.13 1.13 1.13

【讨论】:

以及如何更改索引的名称? ?setnames函数 但是,在其他函数中使用 data.table 时,setkeyv 参数出现错误。

以上是关于使用 setkeyv 参数在 R 问题中将 xts 转换为 data.table的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 xts 中将 period.apply 与 doParallel 和 foreach 一起使用?

在R中使用as.xts()动物园到xts时的引号

R语言时间序列数据应用xts

xts 格式的时间戳和高频包的列名

将 XTS 对象作为数据帧存储在 R 的列表中

在 R 中使用线性插值添加缺失的 xts/zoo 数据