iterative cumsum where sum determines the next position to be added

后端 未结 3 1206
天涯浪人
天涯浪人 2021-01-29 07:17

I have a data.table as follows

set.seed(5)
x <- data.table(x=sample(1:20,15))

> x
     x
 1:  5
 2: 14
 3: 17
 4: 20
 5:  2
 6: 11
 7:  8
 8: 15
 9: 12
10         


        
3条回答
  •  借酒劲吻你
    2021-01-29 07:53

    We can use Reduce with accumulate = TRUE

    accum <- Reduce(function(i, j) i + x$x[i], x$x, accumulate = TRUE)
    c(1, accum[!is.na(accum)])
    # [1]  1  5  7 15 28
    

    or purrr::accumulate

    library(purrr)
    
    accum <- accumulate(x$x, ~ .x + x$x[.x])
    c(1, accum[!is.na(accum)])
    # [1]  1  5  7 15 28
    

提交回复
热议问题