Сначала я предварительно заполняю таблицу начальными значениями:
df <- data.frame(row = 1:5,
Var1 = rep(500, 5),
Var2 = c(0, rep(NA_real_, 4)),
Var3 = c(0, rep(NA_real_, 4)),
Var4 = c(500, rep(NA_real_, 4)),
Var5 = 0.1)
Затем, поскольку это рекурсивно, я перезапускаю эту процедуру, и каждый раз она заполняет еще одну строку в зависимости от наличия предыдущей строки. (Вероятно, не самый элегантный, но это работает!)
library(dplyr)
for(i in 2:nrow(df)) {
df <- df %>%
mutate(Var2 = if_else(row == 1, 0, lag(Var4) * Var5),
Var3 = if_else(row == 1, 0, Var2 + lag(Var3)),
Var4 = if_else(row == 1, 500, Var1 - Var3),
Var5 = 0.1)
}
выход
> df
row Var1 Var2 Var3 Var4 Var5
1 1 500 0.00 0.00 500.00 0.1
2 2 500 50.00 50.00 450.00 0.1
3 3 500 45.00 95.00 405.00 0.1
4 4 500 40.50 135.50 364.50 0.1
5 5 500 36.45 171.95 328.05 0.1