【问题标题】:R: Is it possible to use mutate+lag with the same column?R:是否可以在同一列中使用 mutate+lag ?
【发布时间】:2016-10-25 22:28:21
【问题描述】:

我正在尝试在 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)

【问题讨论】:

  • 只用mutate(dat, x = lag(z) * b + z * (1 - b))?
  • 公式应该滞后 x,而不是 z。它使用先前的值 * b + z * (1-b)。但是要使公式起作用,第一个值应该是第一个“z”
  • 按顺序运行:dat <- data.frame(week = seq(1:52), z = runif(52, 0, 100), b = 0.2) 然后mutate(dat, x = lag(z) * b + z * (1 - b))。你得到了什么?我没有得到 NaNs
  • 它工作滞后 (z) 但要使公式工作我需要滞后 (x) 除了 x 的第一个值是第一个 z,谢谢!
  • 你的意思是mutate(dat, x = lag(z, default = z[1]) * b + z * (1 - b))

标签: r dplyr lag lead


【解决方案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,]
  }

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 2021-11-14
    • 2021-05-11
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-05
    • 2020-12-25
    • 2019-12-28
    相关资源
    最近更新 更多