【发布时间】:2016-01-23 01:32:53
【问题描述】:
我有一个包含 ID、日期和观察到的回报的数据框。可以比喻成这样:
df <- data.frame(
ID = gl(3, 10, labels = c("A", "B", "C")),
Date = factor(rep(2006, 2015, 3)),
lr = runif(30, -0.01, 0.01))
现在我想使用以下函数来查找每个 ID 的指数移动平均值的向量,并将它们作为新列添加到我的原始数据框中:
Emean<-function(x){
ema <- function(a,b) {lambda*a+(1-lambda)*b}
Reduce(ema, x, accumulate=T)
}
所以我希望生成的数据框包含 ID、Date、lr 和 mlr 列。最后一列(mlr)将使用上述函数计算;和(对不起,符号松散!)但这是公式:
mlr_t=lambda*mlr_t-1 + (1-lambda)*lr_t
'_t' 表示时间。
现在正如我所说,我想将我的函数应用于按 ID 分组的行,并将结果作为列添加到此数据框中。 'Reduce' 的输出不能直接添加到该数据帧中,我必须分几个步骤操作它,这在 R 中非常耗时。
我需要一个计算效率高的解决方案来完成我所说的。在实际数据集中,每个 ID 有 +100K 个 ID 和 +250 个日期。
【问题讨论】: