2017-02-10 391 views
2

我不知道爲什麼我無法將這個包裹起來,但也許有人可以提供幫助。 我已經做了以下使用for循環:計算矢量的所有元素的累積百分比

v <- c(500,498,457,400,376,300,210,157,64,10,2,2,2,1,1,1,1,1,1,1) 
partsum <- 0 
total <- sum(v) 
percov <- numeric() 
for (i in 1:length(v)){ 
     partsum <- partsum + v[i] 
     percov[i] <- 100 * partsum/total 
} 
percov 

不過,我處理的數據量龐大,並且for循環是相當緩慢。我覺得肯定有另一種方式來做到這一點在R,它可能會更快。例如:

percov <- 100 * partsum/sum(v) 

其中每個元素的索引的份數是大於或等於該元素的v值的所有元素的總和。但我該怎麼做?

回答

1

我們可以通過vectorsum劃分vector的累積和(cumsum)和100

percovN <- 100*cumsum(v)/sum(v) 

乘從OP的方法

identical(percovN, percov) 
#[1] TRUE 
+1

真棒,謝謝檢查輸出! – davo1979