根据提供的列索引将多列xts减少为单列xts

时间:2014-02-17 05:42:15

标签: r xts

我有一个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

我觉得我错过了一些关于如何做到这一点的非常基本的东西但是,如果是这样的话,它现在正在逃避我。

1 个答案:

答案 0 :(得分:1)

您的数据似乎是每月一次,因此我强烈建议您从POSIXct索引转移到Dateyearmon索引。否则,您可能会遇到时区和夏令时问题。

解决此问题的一种方法是合并xts.1xts.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