【发布时间】: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))?