【问题标题】:R xts calculating percentage index on multiple seriesR xts 计算多个系列的百分比指数
【发布时间】:2016-04-16 21:20:53
【问题描述】:

我有一个 xts 对象,其列数不断变化,但索引始终相同。我想根据每个系列的第一个元素获取百分比索引。

例如使用 一个 列:

library(xts)

x <- xts(1:10,as.Date("2012-12-21")+1:10)
x

z<-(x / drop(coredata(first(x, 1))))*100
z

如果可以更改列数,有没有办法在每列上运行此计算?

【问题讨论】:

    标签: r xts


    【解决方案1】:

    您可以使用apply 来执行此操作,我更喜欢apply 而不是sapply,因为apply 将其第一个参数强制转换为矩阵。这简化了对每一列进行操作所需的函数。

    我将使用与tonytonov's answer 相同的x

    R> x <- xts(matrix(1:20, ncol = 2),as.Date("2012-12-21") + 1:10)
    R> as.xts(apply(x, 2, function(v) 100*v/v[1]))
               [,1]     [,2]
    2012-12-22  100 100.0000
    2012-12-23  200 109.0909
    2012-12-24  300 118.1818
    2012-12-25  400 127.2727
    2012-12-26  500 136.3636
    2012-12-27  600 145.4545
    2012-12-28  700 154.5455
    2012-12-29  800 163.6364
    2012-12-30  900 172.7273
    2012-12-31 1000 181.8182
    

    请注意,您不需要调用coredatadrop,因为apply 首先将x 强制转换为矩阵(通过调用as.matrix.xts)。这意味着v 是一个简单的数字向量。这也使得使用as.xtsapply 的输出强制回xts 对象变得更容易。

    【讨论】:

      【解决方案2】:

      给定一个像

      这样的系列
      x <- xts(matrix(1:20, ncol = 2),as.Date("2012-12-21") + 1:10)
      

      可以使用例如sapply 像这样:

      xts(sapply(x, function(y) 100 * y / as.numeric(y[1, ])), index(x))
                  x.1   x.2
      2012-12-22  100 100.0
      2012-12-23  200 109.1
      2012-12-24  300 118.2
      2012-12-25  400 127.3
      2012-12-26  500 136.4
      2012-12-27  600 145.5
      2012-12-28  700 154.5
      2012-12-29  800 163.6
      2012-12-30  900 172.7
      2012-12-31 1000 181.8
      

      【讨论】:

        猜你喜欢
        • 2015-01-02
        • 1970-01-01
        • 2022-01-21
        • 2022-01-26
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多