如何创建两个相互依赖且依赖于数据帧中其他值的变量?

时间:2018-10-23 13:31:27

标签: r

我有一个采用以下格式的数据框:

trial <- c(1:4)
alpha <- rep(0.2, 4)
beta <- rep (0.5, 4)
df<- cbind.data.frame(trial, alpha, beta) 

我需要创建变量vdelta_vdelta_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值计算,另一个基于该变量。

非常感谢!

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_vfor。然后只需填充它们即可。

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)