我在这个线程中找到了一些关于xts字段表示的信息,但我仍然不清楚为什么xts是一个索引+一个矩阵。为什么不使用索引+数据帧?在处理因子和数字列时,这难道不允许更大的灵活性吗?
一旦我在xts中加载了数据,大部分工作都是对时间序列的全集或子集进行数值运算。为此,索引工作得很好,但我不得不通过像data.frame(data.matrix(myxts))
这样的调用才能提取因子和数值列。
此外,我发现使用$符号比矩阵索引更方便,尽管这确实是一个不同的问题。例如:
lm(myxts$Res ~ myxts$ThisVar + myxts$ThatVar)
比更容易写
lm(myxts[, "Res"] ~ myxts[, "ThisVar"] + myxts[, "ThatVar"]).
xts使用矩阵而不是数据帧,因为:
- 它是zoo的一个子类,这就是zoo对象的结构
- 矩阵对象比数据帧具有更好的性能
您的第二个问题可以通过对lm
使用data=
参数来解决,或者更一般地,通过使用with
:来解决
with(myxts, lm(Res ~ ThisVar + ThatVar))