【问题标题】:R: "deaccumulate" sum vector without a for loopR:没有for循环的“deaccumulate”和向量
【发布时间】:2014-09-07 18:29:27
【问题描述】:

如果我们有一个向量并且想要累积它的数量,我们使用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

【问题讨论】:

    标签: r optimization cumulative-sum


    【解决方案1】:
    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
    

    【讨论】:

    • 可能是c(vec.sum[1], diff(vec.sum))。那么vec[1]就不需要了。
    • 谢谢,@akrun!答案太明显了,我觉得自己像个白痴。我不知道diff 函数
    • @Bernardo 我使用diff 特别是用于创建逻辑索引。这是一个非常有用的功能。
    猜你喜欢
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2021-12-01
    • 2020-01-29
    相关资源
    最近更新 更多