我有一张表格如下:
json_encode
我想用cat1和cat2来计算指数加权移动平均线。
使用初始值零,这可能是:
cat1 cat2 d
1 A C 0.6445386
2 B D 0.1831454
3 A C 0.5093117
4 A D 0.3516816
5 B C 0.2547064
6 A D 0.3209060
但这会返回错误:
table %>%
group_by(cat1,cat2) %>%
arrange(cat1,cat2) %>%
mutate(ema = (1-lambda)*ema+lambda*lag(ema,1,default=0)
我该如何解决这个问题?是否无法使用dplyr引用先前的迭代?
答案 0 :(得分:0)
第一次引用ema
时未初始化,因此没有名为ema
的对象
mutate( ema =(1-lambda)* ema + lambda * lag(ema,1,默认= 0)
粗体ema
是自引用的,可能你正在寻找的公式是:(1-lambda)*d + lambda*lag(ema)
,所以我在解决方案中使用了这个
library(dplyr)
table <- data.frame(cat1 = c("A","B","A","A","B","A"),
cat2 = c("C","D","C","D","C","D"),
d = c(0.1831454, 0.5093117, 0.3516816 ,0.2547064 ,0.3209060,0.6445386))
lambda <- 0.55
table$ema <- NA
table$ema[1] <- table$d[1]
table %>%
group_by(cat1,cat2) %>%
arrange(cat1,cat2)
for(i in (2:dim(table)[1])){
table$ema[i] <- table$d[i]*(1-lambda) + lambda*(table$ema[i-1])
}
这就是你要找的东西吗?
编辑:更改了代码