使用基准年计算数据框子集中的百分比变化

时间:2016-01-02 16:32:22

标签: r time-series

我有以下数据集,其中包含两家公司在五年内的销售数据。我想用第一年的数字作为基准,计算每家公司每个后续年度的销售变化百分比。我使用以下内容:

transform(dataset, SalesD = unlist(aggregate(Sales ~ Company, function(x) ((x - x[1]) / x[1]) * 100, data=Dataset)$Sales))

但我没有得到第二家公司的正确值(我预计第6行的值为零,因为这是基准年)。结果如下:

+----+---------+------+--------+--------+
| ID | Company | Year | Sales  | SalesD |
+----+---------+------+--------+--------+
|  1 | LSL     | 2015 | 100000 |      0 |
|  2 | LSL     | 2016 | 120000 |     20 |
|  3 | LSL     | 2017 | 150000 |     50 |
|  4 | LSL     | 2018 | 100000 |      0 |
|  5 | LSL     | 2019 |  50000 |    -50 |
|  6 | IDA     | 2015 | 150000 |     50 |
|  7 | IDA     | 2016 | 180000 |     80 |
|  8 | IDA     | 2017 | 200000 |    100 |
|  9 | IDA     | 2018 | 180000 |     80 |
| 10 | IDA     | 2019 | 160000 |     60 | 
+----+---------+------+--------+--------+

你能帮我指出代码中有什么问题吗? 非常感谢!

1 个答案:

答案 0 :(得分:1)

我们可以使用data.table。将“data.frame”转换为“data.table”(setDT(df1)),按“公司”分组,我们通过从与“{”对应的“Sales”值中减去“Sales”来获得百分比变化1}}“Year”的值,乘以100,min并指定(round)来创建“SalesD”。

:=