我尝试计算向量中每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
答案 0 :(得分:2)
您可以使用TTR包
TTR::runSum(vector, 3)
[1] NA NA 12 19 24 41 34 34 134 134
它将为您提供相同大小的矢量....您可以选择删除NAs
答案 1 :(得分:0)
另一个选项是来自roll_sum
RcppRoll
RcppRoll::roll_sum(vector, 3, fill= NA, align = "right")
#[1] NA NA 12 19 24 41 34 34 134 134
答案 2 :(得分: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