Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 计算滚动和积_R_Vector_Rolling Computation_Sumproduct - Fatal编程技术网

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))