Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用基准年计算数据帧子集的百分比变化_R_Time Series - Fatal编程技术网

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

R 使用基准年计算数据帧子集的百分比变化,r,time-series,R,Time Series,我有以下数据集,其中包含两家公司五年期间的销售数据。我想用第一年的数据作为基线,计算每个公司随后每一年的销售额变化百分比。我使用以下方法: transform(dataset, SalesD = unlist(aggregate(Sales ~ Company, function(x) ((x - x[1]) / x[1]) * 100, data=Dataset)$Sales)) 但我没有得到第二家公司的正确值(我预计第6行的值为零,因为这是基准年)。结果如下: +----+--------

我有以下数据集,其中包含两家公司五年期间的销售数据。我想用第一年的数据作为基线,计算每个公司随后每一年的销售额变化百分比。我使用以下方法:

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 | 
+----+---------+------+--------+--------+
你能帮我指出代码中的错误吗?
非常感谢

我们可以使用
数据表
。将“data.frame”转换为“data.table”(
setDT(df1)
),按“Company”分组,我们通过从对应于“Year”的
min
值的“Sales”值中减去“Sales”,乘以100,
四舍五入(
:=
)来创建“SalesD”,从而得到百分比变化

谢谢你,它做到了!(虽然我需要读一点data.table库,但我对它不是很熟悉)@orestisf您可以查看和
library(data.table)
setDT(df1)[, SalesD := round(100*(Sales- 
         Sales[which.min(Year)])/Sales[which.min(Year)]) , Company]
df1
#     ID Company Year  Sales SalesD
# 1:  1     LSL 2015 100000      0
# 2:  2     LSL 2016 120000     20
# 3:  3     LSL 2017 150000     50
# 4:  4     LSL 2018 100000      0
# 5:  5     LSL 2019  50000    -50
# 6:  6     IDA 2015 150000      0
# 7:  7     IDA 2016 180000     20
# 8:  8     IDA 2017 200000     33
# 9:  9     IDA 2018 180000     20
#10: 10     IDA 2019 160000      7