2017-07-29 51 views
0

我嘗試計算矢量中每個n數的和。我建立了一個函數來計算它,但我相信應該有一些更方便的方法來做到這一點。如何計算R中Vector中每個n數的和?

假設這是我的矢量:

vector = c(1,5,6,8,10,23,1,10,123,1) 

我的功能是計算每n數量的總和:

Sum_N <- function(vector, n){ 

    result <- c() 

    for(i in seq(1:(length(vector)-n+1))){ 

    result[i] <- sum(vector[i:(i+n-1)]) 

    } 

return(result) 
} 

結果是一個向量:

### Sum_N(vector,3) 
### 12 19 24 41 34 34 134 

回答

2

你可以使用TTR包

TTR::runSum(vector, 3) 
 
[1] NA NA 12 19 24 41 34 34 134 134

它會給你同樣大小的矢量....你有刪除的NA

0

另一種選擇是roll_sumRcppRoll

RcppRoll::roll_sum(vector, 3, fill= NA, align = "right") 
#[1] NA NA 12 19 24 41 34 34 134 134 
0

聽起來像一個選項filter功能的作業(這是stats::filter的具體說明):

filter(vector, rep(1,3), sides=1) 
#Time Series: 
#Start = 1 
#End = 10 
#Frequency = 1 
# [1] NA NA 12 19 24 41 34 34 134 13 

如果時間序列輸出導致的問題,只是壓平迴向量:

c(filter(vector, rep(1,3), sides=1)) 
# [1] NA NA 12 19 24 41 34 34 134 134