2016-09-21 34 views
0

我有两列/向量,我想要得到加权平均值。我发现这一点,但我不能将lambda更改为colum/vector。适用,mapply?我试图在R中计算加权移动平均数

wma.func = function(rets, lambda) { 
    sig.p = rets[1] 
    sig.s = vapply(rets, function(r) sig.p <<- sig.p*lambda + (r)*(1 - lambda), 0) 
    return(sig.s) 
} 

我需要财产以后这样的:

lwma.func = function(rets, wt) { 
    sig.p = rets[1] 
    sig.w = wt[1] ???? 
    print(wt[1:10]) 
    sig.s = vapply(rets, function(r) sig.p <<- sig.p*sig.w + (r)*(1 - sig.w), 0) 
    return(sig.s) 
} 

使每一行中它总结过去的值乘以该特定行的重量加上实际值乘以一减特定行。

除了我不真正了解该功能如何

function(r) sig.p <<- sig.p*sig.w + (r)*(1 - sig.w) 

的作品? < < - 是什么意思?
谢谢你的帮助。

+0

您能提供一个带有所需输出的示例数据的小例子吗? – davechilders

回答

0

这里做一个data.table方式:

library("data.table") 
set.seed(4444) 
df <- data.frame(value = round(runif(10, 1 , 1000), 0), 
       weight = round(runif(10, 0.1, 0.99), 2)) 
setDT(df) 

df[, new := shift(x = value, n = 1, type = "lag") * weight + value * (1 - weight)] 

PS您可以通过输入?`<<-`,这主要是告诉你,它分配一个值到父环境,而不仅仅是功能的直接仰望<<-操作环境。

+0

谢谢你完美的工作。尼斯 –

+0

UPS!检查数据不总结新值总是总和最后一个值*权重+实际值*(1-权重)。但是我需要最后计算出“新”价值。 –

+0

那么你想新的*重量+实际*(1重量)?如果是这样,你的第一排就不会有“新”了。 – ddunn801