R:" deaccumulate"没有for循环的sum矢量

时间:2014-09-07 18:29:28

标签: r optimization cumulative-sum

如果我们有一个向量并希望累积其数字,我们会使用cumsum

vec = c(0,3,3,1,1,3)
vec.sum = cumsum(vec)

vec.sum
[1]  0  3  6  7  8 11

当我们想要相反的时候呢? for循环可以解决这个问题,但有没有更有效的方法来实现这一点,特别是对于大型向量?

for (i in length(vec.sum):2) {
  vec.sum[i] = vec.sum[i] - vec.sum[i-1]
}

vec.sum
[1] 0 3 3 1 1 3

1 个答案:

答案 0 :(得分:3)

c(vec.sum[1], diff(vec.sum))
#[1] 0 3 3 1 1 3

或者

 c(vec.sum[1],vec.sum[-1]-vec.sum[-length(vec.sum)])
 #[1] 0 3 3 1 1 3