我有两列/向量,我想得到加权平均值。我找到了这个但是我无法将lambda改为colum / vector。
CASE
WHEN Channel IN ('DA','SS','XDOCK','?')
THEN Cast(CASE_QTY AS DECIMAL(38,0))/NullIf(Sum(Cast(CASE_QTY AS DECIMAL(38,2))) Over (PARTITION BY ld.LOAD_ID),0)
ELSE 0
END AS Percentage
我需要这样的事情:
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)
}
这个功能有效吗?什么&lt;&lt; - 意味着什么? 谢谢你的帮助。
答案 0 :(得分: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您可以通过输入<<-
来查找?`<<-`
运算符,它基本上告诉您它为父环境而不仅仅是函数的直接环境赋值。