Как создать две переменные, которые полагаются друг на друга и на другие значения из фрейма данных? - PullRequest
0 голосов
/ 23 октября 2018

У меня есть фрейм данных следующего формата:

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 той же переменной и другого, который зависит от нее.

Большое спасибо!

1 Ответ

0 голосов
/ 23 октября 2018

Во-первых, я буду повторять 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...