有一个简单的R问题,但似乎无法找到答案:
我有一个这样的数据框:
assumption_val year
1.2 2015
0 2016
0 2017
0 2018
0 2019
我想将每个值增加到比前一年高20%,输出如下内容:
assumption_val year
1.2 2015
1.44 2016
1.73 2017
2.07 2018
2.49 2019
如何引用前一行并将其乘以1.2来实现此目的?
谢谢!
答案 0 :(得分:5)
您正在寻找cumprod
:
cumprod(rep(1.2, 5))
与其知名度较高的朋友cumsum
一样,它会累积过去的结果,但会执行乘法而非加法。
df <- data.frame(assumption_val=cumprod(rep(1.2, 5)),
years=2015:2019)
这些函数的一个很好的概括是Reduce
。例如,此处Reduce
执行此计算。您可以将“*”替换为“+”并使用cumsum
。
Reduce("*", rep(1.2, 5), accumulate = T)
此方法的一个很好的功能是您可以调整每个时期的增长率。例如,如果您想从1.5而不是1.2开始,您只需将增长向量调整为c(1.5, rep(1.2, 4))
即可计算新增长,如下所示:
cumprod(c(1.5, rep(1.2, 4)))
答案 1 :(得分:2)
data <- read.table(textConnection("
assumption_val year
1.2 2015
0 2016
0 2017
0 2018
0 2019"), header = TRUE)
data$assumption_val <- data$assumption_val[1]^(1:nrow(data))
data
## assumption_val year
## 1 1.20000 2015
## 2 1.44000 2016
## 3 1.72800 2017
## 4 2.07360 2018
## 5 2.48832 2019