有一个简单的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来实现此目的?

谢谢!

===============>>#1 票数: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)))

===============>>#2 票数: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

  ask by Dom translate from so

未解决问题?本站智能推荐: