【问题标题】:Calculate percentage change in an R data frame计算 R 数据框中的百分比变化
【发布时间】:2013-01-14 21:37:09
【问题描述】:

我在 R 中有一个带有多个向量的时间序列对象。我想计算每个向量在每个时间点的周期百分比变化(保存 t = 1,这显然是 NA)。

> data <- ts(data.frame(x1=c(1:10), x2=c(11:20), x3=c(21:30)), start = c(2010,3), frequency = 4)
> data
        x1 x2 x3
2010 Q3  1 11 21
2010 Q4  2 12 22
2011 Q1  3 13 23
2011 Q2  4 14 24
2011 Q3  5 15 25
2011 Q4  6 16 26
2012 Q1  7 17 27
2012 Q2  8 18 28
2012 Q3  9 19 29
2012 Q4 10 20 30

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    试试这个:

    R> data/stats::lag(data,-1) - 1
             data.x1   data.x2   data.x3
    2010 Q4 1.000000 0.0909091 0.0476190
    2011 Q1 0.500000 0.0833333 0.0454545
    2011 Q2 0.333333 0.0769231 0.0434783
    2011 Q3 0.250000 0.0714286 0.0416667
    2011 Q4 0.200000 0.0666667 0.0400000
    2012 Q1 0.166667 0.0625000 0.0384615
    2012 Q2 0.142857 0.0588235 0.0370370
    2012 Q3 0.125000 0.0555556 0.0357143
    2012 Q4 0.111111 0.0526316 0.0344828
    R> 
    

    【讨论】:

    • 我知道有一个非常简单的解决方案。谢谢!
    • 不客气。您现在可以“接受”(点击勾选标记)或“投票”答案。您可以投票多个​​,但只能接受一个。
    • 我收到此错误:lag.default(data, -1) 中的错误:n 必须是单个正整数
    • 这可能在较新版本的dplyr 中有所改变。在dplyr 0.4.3 中,应该是lag(data, 1)。还有另一个名为lead 的函数用于比较即将到来的值中的偏移量。因此,n 的负值应该没有任何意义。对n 使用负值会出错。
    • 请不要在这种情况下使用 dplyr。它隐藏了同名的基本 R 函数,这是非常糟糕的做法。
    【解决方案2】:

    这样的?

    > diff(data)/data[-nrow(data),] * 100
                   x1       x2       x3
    2010 Q4 100.00000 9.090909 4.761905
    2011 Q1  50.00000 8.333333 4.545455
    2011 Q2  33.33333 7.692308 4.347826
    2011 Q3  25.00000 7.142857 4.166667
    2011 Q4  20.00000 6.666667 4.000000
    2012 Q1  16.66667 6.250000 3.846154
    2012 Q2  14.28571 5.882353 3.703704
    2012 Q3  12.50000 5.555556 3.571429
    2012 Q4  11.11111 5.263158 3.448276
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      相关资源
      最近更新 更多