我有一个xts对象,其中包含多个相同类型的列。我有另一个xts对象,其整数对应于第一个对象中的列位置。我想生成第三个xts对象,其中包含一列,表示相应索引所指示的列的值。例如:
# xts.1:
2003-07-30 17:00:00 0.2015173 0.10159303 0.19244332 0.08138396
2003-08-28 17:00:00 0.1890154 0.06889412 0.12700216 0.04631253
2003-09-29 17:00:00 0.1336947 0.08023267 0.09167604 0.02376319
2003-10-30 16:00:00 0.1713496 0.13324238 0.11427968 0.05946272
# xts.2:
2003-07-30 17:00:00 1
2003-08-28 17:00:00 4
2003-09-29 17:00:00 2
2003-10-30 16:00:00 3
# Desired result:
2003-07-30 17:00:00 0.2015173
2003-08-28 17:00:00 0.04631253
2003-09-29 17:00:00 0.08023267
2003-10-30 16:00:00 0.11427968
我觉得我错过了一些关于如何做到这一点的非常基本的东西但是,如果是这样的话,它现在正在逃避我。
答案 0 :(得分:1)
您的数据似乎是每月一次,因此我强烈建议您从POSIXct
索引转移到Date
或yearmon
索引。否则,您可能会遇到时区和夏令时问题。
解决此问题的一种方法是合并xts.1
和xts.2
,然后循环生成的对象的所有行,通过合并数据中的xts.2
列对列进行子集化
由于您的数据是按月计算的,因此您可以使用apply.monthly
循环查看所有观察结果。
> xts.3 <- merge(xts.1,xts.2)
> apply.monthly(xts.3, function(x) x[,x$xts.2])
[,1]
2003-07-30 17:00:00 0.20151730
2003-08-28 17:00:00 0.04631253
2003-09-29 17:00:00 0.08023267
2003-10-30 16:00:00 0.11427968