我正在尝试创建一个R循环以帮助我获取Var2,Var3和Var4(请参见下面的输出)。 Var1,Var5已预先输入。 Var4 1已预先输入。
Var2 = lag(Var4) * Var5
Var3 = Var2 + lag(Var3)
Var4 = Var1 - Var3
有什么建议吗?
答案 0 :(得分:2)
首先,我用初始值预先填充表格:
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
答案 1 :(得分:1)
基本的R解决方案。
我们用开始值预分配df
df <- data.frame(
Var1 = rep(500, 5),
Var2 = 0,
Var3 = 0,
Var4 = 500,
Var5 = rep(0.1, 5)
)
我们注意到我们可以将递归关系重写为
Var4[i] = Var1[i] - Var4[i-1] * Var5[i] - Var3[i-1]
Var3[i] = Var4[i-1] * Var5[i] + Var3[i-1]
Var2[i] = Var4[i-1] * Var5[i]
然后我们可以在一个df
循环中替换for
中的值
for (i in 2:nrow(df)) {
df$Var4[i] = df$Var1[i] - df$Var4[i-1] * df$Var5[i] - df$Var3[i-1]
df$Var3[i] = df$Var4[i-1] * df$Var5[i] + df$Var3[i-1]
df$Var2[i] = df$Var4[i-1] * df$Var5[i]
}
df
# Var1 Var2 Var3 Var4 Var5
#1 500 0.00 0.00 500.00 0.1
#2 500 50.00 50.00 450.00 0.1
#3 500 45.00 95.00 405.00 0.1
#4 500 40.50 135.50 364.50 0.1
#5 500 36.45 171.95 328.05 0.1