R 计算滚动和积
如果我有以下变量R 计算滚动和积,r,vector,rolling-computation,sumproduct,R,Vector,Rolling Computation,Sumproduct,如果我有以下变量 x <- data.frame(ret = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ) k <- 4 我怎样才能做到这一点 它基本上是最后k个值的总和,但它乘以n/k,其中n是最后k个元素的索引 对于给定的x作为输入,输出将具有以下值 y 7.5 <- y[1,1] = (x[1,1] * 0.25 + x[2,1] *0.5 + x[3,1] *0.75 + 1 * x[4,1]) 10 12.5 15 17.
x <- data.frame(ret = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) )
k <- 4
我怎样才能做到这一点
它基本上是最后k个值的总和,但它乘以n/k,其中n是最后k个元素的索引
对于给定的x作为输入,输出将具有以下值
y
7.5 <- y[1,1] = (x[1,1] * 0.25 + x[2,1] *0.5 + x[3,1] *0.75 + 1 * x[4,1])
10
12.5
15
17.5
20
22.5
25
27.5
30
32.5
35
y
7.5将rollapply与指定功能一起使用:
library(zoo)
wsum <- function(x, k) sum(seq(k) * x) / k
transform(x, ret = rollapply(ret, k, wsum, k = k, align = "left", fill = NA))
图书馆(动物园)
为什么我们需要对它们求和?好的。已将其更改为总和。顺便说一下,问题中定义的权重可能是您想要的,但只是为了以防万一,请注意它们的总和不是1,因此请确保这是所需的。在rollapply中,为什么我们要传递k两次?第一个k作为width=传递,因为这是rollapply的第二个参数。第二个k作为k=k传递,k不是rollply的参数。任何无法识别的参数都会传递给wsum函数,因此在本例中,k会作为wsum的k参数传递给wsum。在基本R中,您可以执行:transform(x,y=filter(ret,seq(k)/k,sides=1))
library(zoo)
wsum <- function(x, k) sum(seq(k) * x) / k
transform(x, ret = rollapply(ret, k, wsum, k = k, align = "left", fill = NA))
wsum <- function(x, k = length(x)) sum(seq(k) * x) / k
transform(x, ret = rollapply(ret, k, wsum, align = "left", fill = NA))