我试图通过一个公式创建一个新的向量,但是我想将该公式的结果包括在同一向量中的后续值。有一种简单的方法可以使我丢失吗?
我从一个值开始,然后乘以每年更改的百分比(v1)。我可以使它工作,但它只包括该行,我希望它能作为一个总和。我尝试过手动插入第1行的值(1000),然后为剩余的行做一个公式[2:10],但这都不起作用(获取NA),我认为这实际上不会导致我想。初始值应为1000,随后的每个值应以该值和上一行为基础。我希望每一行都从上一行的答案开始,然后乘以百分比。我已经尝试了几种方法并搜索了答案,但是我认为我没有使用正确的术语或某种东西,因为我敢肯定有一种更简单的方法可以做到这一点。这是一个可重现的示例:
library(dplyr)
df <- data.frame(Year = c(2010:2019),
v1 = c(1.05, 1.1, 1.12, 1.15, 1.05, 1.3, 1.2, 1.2, 1.1, 1.1))
df$v2[1]=1000
df <- df %>%
mutate(v2 = v2[2:10] * v1 + v2[1])
预期结果应如下所示。
Year v1 v2
1 2010 1.05 1050.00
2 2011 1.10 1155.00
3 2012 1.12 1293.60
4 2013 1.15 1487.64
5 2014 1.05 1562.02
6 2015 1.30 2030.63
7 2016 1.20 2436.75
8 2017 1.20 2924.11
9 2018 1.10 3216.52
10 2019 1.10 3538.17
所以v2 [1] = 1000 * 1.05,v2 [2] = 1050 * 1.10,v2 [3] = 1155 * 1.12,依此类推。
答案 0 :(得分:1)
我们可以使用accumulate
中的purrr
library(tidyverse)
df %>%
mutate(v2 = tail(accumulate(v1, ~ .x * .y, .init = 1000), -1))
# Year v1 v2
#1 2010 1.05 1050.000
#2 2011 1.10 1155.000
#3 2012 1.12 1293.600
#4 2013 1.15 1487.640
#5 2014 1.05 1562.022
#6 2015 1.30 2030.629
#7 2016 1.20 2436.754
#8 2017 1.20 2924.105
#9 2018 1.10 3216.516
#10 2019 1.10 3538.167
一个base R
选项是
tail(Reduce(function(x, y) x * y, df$v1, init = 1000, accumulate = TRUE), -1)
#[1] 1050.000 1155.000 1293.600 1487.640 1562.022 2030.629
#[7] 2436.754 2924.105 3216.516 3538.167