我有一个采用以下格式的数据框:
trial <- c(1:4)
alpha <- rep(0.2, 4)
beta <- rep (0.5, 4)
df<- cbind.data.frame(trial, alpha, beta)
我需要创建变量v
和delta_v
。 delta_v <- alpha * (beta - v)
。 v
从0开始,并且下一个试验基于v
的先前值,而delta_v
是它们的总和(v = v(先前的试验)+ delta_v(先前的试验)
此最小示例的输出应为数据框:
trial <- c(1:4)
alpha <- rep(0.2, 4)
beta <- rep (0.5, 4)
v <- c(0, 0.1, 0.18, 0.244)
delta_v <- c(0.1, 0.08, 0.064, 0.0512)
df<- cbind(trial, alpha, beta, v, delta_v)
我不是要如何为两个相互依赖的变量创建一个for循环,其中一个从0开始,并根据同一个变量的i-1值计算,另一个基于该变量。
非常感谢!
答案 0 :(得分:2)
首先,我将重做df
,不需要cbind
。
trial <- 1:4
alpha <- rep(0.2, 4)
beta <- rep (0.5, 4)
df <- data.frame(trial, alpha, beta)
现在,代码。
首先定义一个n
循环变量,以及一个v
循环之外的感兴趣变量delta_v
和for
。然后只需填充它们即可。
n <- nrow(df)
v <- delta_v <- numeric(n)
delta_v[1] <- alpha[1]*(beta[1] - v[1])
for(i in seq_len(n)[-1]){
v[i] <- v[i - 1] + delta_v[i - 1]
delta_v[i] <- alpha[i]*(beta[i] - v[i])
}
v
#[1] 0.000 0.100 0.180 0.244
delta_v
#[1] 0.1000 0.0800 0.0640 0.0512
df <- data.frame(trial, alpha, beta, v, delta_v)