簡體   English   中英

計算滾動總和產品

[英]Calculate rolling sum product

如果我有以下變量

x <- data.frame(ret = c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) )
k <- 4

我想讓你這樣

y[i,1] = x[i,1]*(1/k) + x[i+1,1]*(2/k) + x[i+2,1]*(3/k) + x[i+3,1]*(k/k)
.
.
.

till i = nrow(x) - k + 1

我怎樣才能做到這一點?

它基本上是最后 k 個值的總和,但它乘以 n/k,其中 n 是最后 k 個元素的索引。

對於給定的 x 作為輸入,output 將具有以下值

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

將 rollapply 與指示的 function 一起使用:

library(zoo)

wsum <- function(x, k) sum(seq(k) * x) / k 
transform(x, ret = rollapply(ret, k, wsum, k = k, align = "left", fill = NA))

更新

允許我們省略 k = k 參數的替代方法是:

wsum <- function(x, k = length(x)) sum(seq(k) * x) / k 
transform(x, ret = rollapply(ret, k, wsum, align = "left", fill = NA))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM