R:是否可以在同一列中使用mutate + lag?

时间:2016-06-23 14:11:48

标签: r dplyr lag lead

我试图在R中复制以下公式:

Xt = Xt-1 * b + Zt *(1-b)

我使用以下代码

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)

1 个答案:

答案 0 :(得分:1)

我发现解决方案运行了以下循环,感谢@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,]
  }