【发布时间】:2012-03-06 21:39:34
【问题描述】:
我可以像处理 data.frame 一样将 data.table 转换为 xts 对象:
> df = data.frame(x = c("a", "b", "c", "d"), v = rnorm(4))
> dt = data.table(x = c("a", "b", "c", "d"), v = rnorm(4))
> xts(df, as.POSIXlt(c("2011-01-01 15:30:00", "2011-01-02 15:30:00", "2011-01-03 15:50:50", "2011-01-04 15:30:00")))
x v
2011-01-01 15:30:00 "a" "-1.2232283"
2011-01-02 15:30:00 "b" "-0.1654551"
2011-01-03 15:50:50 "c" "-0.4456202"
2011-01-04 15:30:00 "d" "-0.9416562"
> xts(dt, as.POSIXlt(c("2011-01-01 15:30:00", "2011-01-02 15:30:00", "2011-01-03 15:50:50", "2011-01-04 15:30:00")))
x v
2011-01-01 15:30:00 "a" " 1.3089579"
2011-01-02 15:30:00 "b" "-1.7681071"
2011-01-03 15:50:50 "c" "-1.4375100"
2011-01-04 15:30:00 "d" "-0.2467274"
在 xts 中使用 data.table 有什么问题吗?
【问题讨论】:
-
没有问题,但它是 data.table 的事实丢失了:数据被转换为矩阵(在 xts 对象内)。在您的示例中,它甚至是一个字符串矩阵。
-
我认为 xts 在其内部实现中保留了一个 data.frame 对象,并且只添加时间索引作为属性。我在 xts 本机而不是 data.frame 或 data.table 查询上运行的索引查询?
-
@RobertKubrick:xts 和它的父类 (zoo) 一样,使用带有索引属性的矩阵(不是 data.frame)。
-
我明白了。所以我在 xts 列上运行的任何查询,例如 myxts[myxts$Var1 == "ABC" & myxts$Var2 == "123",] 实际上都是矩阵查询?
-
如果您在 posixct 列上有带有键设置的 data.table,那不是涵盖了 xts 的功能吗?当然有很多为 xts 设计的功能,但从长远来看,在 posixct 上使用 dt 和 key 不是更好吗?
标签: r xts data.table