2016-06-23 3 views
0

Я пытаюсь повторить следующую формулу в R:R: Можно ли использовать mutate + lag с тем же столбцом?

Xt = Xt-1 * Ь + Zt * (1-б)

Я использую следующий код

t %>% 
    mutate(x= ifelse(week == 1, z, NaN)) %>% # Initial value for the first lag 
    mutate(x= ifelse(week != 1, lag(x,1 ,default = 0) * b + z, z) 

Но я получаю все NaN за исключением второго элемента.

 z  b   x 
    (dbl) (dbl) (dbl) 
1 168.895 0.9  168.8950 
2 20.304 0.9  131.7472 
3 14.943 0.9   NA 
4 11.028 0.9   NA 
5 8.295 0.9   NA 
6 8.024 0.9   NA 
7 6.872 0.9   NA 
8 7.035 0.9   NA 
9 4.399 0.9   NA 
10 4.158 0.9   NA 

Это довольно просто в Excel, но я должен сделать это в R, есть ли у вас подходы?

Воспроизводимый пример:

set.seed(2) 
t = data.frame(week = seq(1:52), 
       z = runif(52, 0, 100), 
       b = 0.2) 
+0

Просто используйте 'мутирует (DAT, х = задержка (г) * b + z * (1 - b)) '? –

+0

Формула должна располагаться х, а не z. Он использует предыдущее значение * b + z * (1-b). Но для формулы для работы первое значение должно быть первым «z» – JJ1603

+0

Запустите это в следующем порядке: 'dat <- data.frame (week = seq (1:52), z = runif (52, 0, 100) , b = 0.2) 'then' mutate (dat, x = lag (z) * b + z * (1 - b))'. Что вы получаете? Я не получаю NaNs –

ответ

0

Я нашел решение, выполнив следующую петлю, благодаря @Frank и @docendo discimus

for (row in 2:dim(t)[1]) { 
    t[row,] <- mutate(t[1:row,], x= lag(x,1) * b + z * (1 - b))[row,] 
    } 
Смежные вопросы