【问题标题】:Reducing multi-column xts to single column xts based on provided column indexes根据提供的列索引将多列 xts 减少为单列 xts
【发布时间】:2014-03-16 18:44:15
【问题描述】:

我有一个包含多个相同类型列的 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

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

【问题讨论】:

    标签: r xts


    【解决方案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
    

    【讨论】:

    • 这正是我最终所做的。谢谢!不过,这样做感觉很笨拙。你会认为会有更优雅和直接的东西。
    • @neverfox:对于您的较大问题,可能有更优雅的解决方案,但这需要您在创建 xts.2 对象之前备份几个步骤。
    猜你喜欢
    • 2012-03-03
    • 2016-01-14
    • 2013-03-01
    • 2022-01-24
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多