将前一行值乘以常数R.

时间:2016-05-24 18:25:17

标签: r dataframe

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

谢谢!

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