使用索引列计算列中的差异

时间:2014-01-08 13:39:00

标签: r difference

我想计算我的专栏value的差异(更改/增量)。 Data.frame:

ID       Dato Tenor value   tmt
B1 2014-01-02    3M     8  0.25
B1 2014-01-02    6M    14  0.50
B1 2014-01-02    1Y    20  1.00
B1 2014-01-02    2Y    41  2.00
B1 2014-01-02    3Y    57  3.00
B1 2014-01-02    5Y    80  5.00
B1 2014-01-02    7Y    85  7.00
B1 2014-01-02   10Y    89 10.00

输出应该是差异6M-3M,2Y-1Y,因此我希望得到新的data.frame看起来像这样:

ID       Dato Tenor value  tmt
B1 2014-01-02    6M     6 0.25
B1 2014-01-02    1Y     6 0.50
B1 2014-01-02    2Y    21 1.00
B1 2014-01-02    3Y    16 1.00
B1 2014-01-02    5Y    23 2.00
B1 2014-01-02    7Y     5 2.00
B1 2014-01-02   10Y     4 3.00

在R中有这样一种巧妙的方法吗?通常有一种计算差异的方法,其中差异是通过计算得出的。自定义订单/索引?索引变量将在此前为tmt。 data.frame可能看起来像这样:

ID       Dato Tenor value   tmt
B1 2014-01-02    1Y    20  1.00
B1 2014-01-02    2Y    41  2.00
B1 2014-01-02    3Y    57  3.00
B1 2014-01-02    5Y    80  5.00
B1 2014-01-02    7Y    85  7.00
B1 2014-01-02   10Y    89 10.00
B1 2014-01-02    3M     8  0.25
B1 2014-01-02    6M    14  0.50

结果应该是值(tmt2) - 值(tmt1),其中tmt2> tmt1总是。 斯蒂

1 个答案:

答案 0 :(得分:1)

我没有看到您引用的“自定义订单/索引”,但您可以使用diff轻松获取输出:

> x <- cbind(mydf[-1, ], value2 = diff(mydf$value))
> x
  ID       Dato Tenor value  tmt value2
2 B1 2014-01-02    6M    14  0.5      6
3 B1 2014-01-02    1Y    20  1.0      6
4 B1 2014-01-02    2Y    41  2.0     21
5 B1 2014-01-02    3Y    57  3.0     16
6 B1 2014-01-02    5Y    80  5.0     23
7 B1 2014-01-02    7Y    85  7.0      5
8 B1 2014-01-02   10Y    89 10.0      4