申请,mapply?我试图计算R中的加权移动平均线

时间:2016-09-21 18:10:15

标签: r

我有两列/向量,我想得到加权平均值。我找到了这个但是我无法将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; - 意味着什么? 谢谢你的帮助。

1 个答案:

答案 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您可以通过输入<<-来查找?`<<-`运算符,它基本上告诉您它为父环境而不仅仅是函数的直接环境赋值。