【问题标题】:Dividing one xts by another and creating a new xts in the process将一个 xts 除以另一个并在此过程中创建一个新 xts
【发布时间】:2018-04-19 19:59:47
【问题描述】:

我希望将两个 xts 对象彼此分开。每个 xts 具有相同的列数(具有相同的列名)但行数不同。我希望我的代码在其他 xts 中找到其各自的列,并找到相应的日期值并将它们分开,然后将新输出放在具有相同列的新 xts 中。

例如:

xts 1

Date         V1     V2
2017-07-21   4.5    NA
2017-09-15   NA     2.5

xts 2

Date         V1     V2
2017-06-15  12.9   10.7
2017-07-21   6.7    2.2
2017-08-13   7.9    8.3
2017-09-15   4.5    3.2

新xts

Date         V1     V2
2017-07-21  0.67    NA
2017-09-15   NA    1.28

【问题讨论】:

    标签: r xts


    【解决方案1】:

    我认为xts 库实际上是一个非常了不起的工具,它会自动完成

    > xts1 <- structure(c(4.5, NA, NA, 2.5), .Dim = c(2L, 2L),
       .Dimnames = list(NULL, c("V1", "V2")),
       index = structure(c(1500595200, 1505433600), tzone = "UTC", tclass = "Date"),
       class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date",
       .indexTZ = "UTC", tzone = "UTC")
    > xts2 <- structure(c(12.9, 6.7, 7.9, 4.5, 10.7, 2.2, 8.3, 3.2),
       .Dim = c(4L, 2L), .Dimnames = list(NULL, c("V1", "V2")),
       index = structure(c(1497484800, 1500595200, 1502582400, 1505433600),
           tzone = "UTC", tclass = "Date"),
       class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date",
       .indexTZ = "UTC", tzone = "UTC")
    > xts1 / xts2
                      V1      V2
    2017-07-21 0.6716418      NA
    2017-09-15        NA 0.78125
    

    算术运算将尊重日期并在执行任何操作之前匹配它们。

    希望有帮助

    【讨论】:

    • 感谢@JoshuaUlrich 的编辑,以后会尝试发布更完整的答案
    • 不是你的错。原始问题不可重现,您的答案很准确。我唯一要添加的是人们可以运行的示例,所以我做到了。 ;-)
    【解决方案2】:

    这是apply的解决方案:

    > t(apply(xts1, 1, function(d)as.numeric(xts1[d[1],c('V1', 'V2')])/as.numeric(xts2[d[1],c('V1', 'V2')])))
                    [,1]    [,2]
    2017-07-21 0.6716418      NA
    2017-09-15        NA 0.78125
    

    【讨论】:

    • 谢谢你。非常有帮助。假设我有很多列(超过 100 个),我可以将“c('V1','V2')”更改为“names(xts1)”吗?
    • 或者更好names(xts1)[-1],否则在划分“日期”字段时会出错
    • 谢谢。我收到一条调试消息“if (!all(i
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2019-09-02
    • 2011-10-29
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多