How to create a cumulative vector itself in R

I think it is very easy, but my R kung-fu is weak. I am trying to create a vector in itself in a cumulative way. This code works, but I would like to do something more elegant and automated. I have millions of lines to accumulate.

a <- c(4,4,5,1,9)
a <- a[order(-a[])]
k <- a[1:length(a)]/sum(a)
w <- c(k[1],k[1]+k[2],k[1]+k[2]+k[3],k[1]+k[2]+k[3]+k[4],k[1]+k[2]+k[3]+k[4]+k[5])
w
+3
source share
2 answers

Did you mean cumsum()?

> a <- c(4,4,5,1,9)
> a <- a[order(-a[])]            # just calling sort is shorter too
> k <- a[1:length(a)]/sum(a)     # long way  
> k 
[1] 0.391304 0.217391 0.173913 0.173913 0.043478
> k <- a/sum(a)                  # same, but shorter
> k  
[1] 0.391304 0.217391 0.173913 0.173913 0.043478
> ck <- cumsum(k) 
> ck  
[1] 0.39130 0.60870 0.78261 0.95652 1.00000 
>   

Edit I missed another simplification:

> a <- c(4,4,5,1,9)
> ck <- cumsum( sort(a, decr=TRUE) / sum(as) ) 
> ck  
[1] 0.39130 0.60870 0.78261 0.95652 1.00000 
>   

You want it sort()here, not order()in combination with indexing.

+3
source

Bing is my friend ... I found the cumsum () function.

-1
source

Source: https://habr.com/ru/post/1768545/