2016-11-28 168 views
2

基礎累積加權平均是如下的數據表:R:在data.table

library(data.table) 
dt <- data.table(Position = 1:3, Price = c(50, 45, 40), Volume = c(10, 10, 10)) 

dt 
    Position Price Volume 
1:  1 50  10 
2:  2 45  10 
3:  3 40  10 

現在我想以計算加權平均用於每個位置,考慮到所有的位置"<="當前位置。結果應該是:

dt[, Vwa := c(50, 47.5, 45)] 

dt 
    Position Price Volume Vwa 
1:  1 50  10 50.0 
2:  2 45  10 47.5 
3:  3 40  10 45.0 

任何想法如何做到這一點有效?

+1

''dt [,Vwa:= cumsum(Price)/(1:.N)]'? –

回答

4

假設您的Position列包含唯一值並已事先排序,您可以根據加權平均值的定義進行計算。如果Volume是權重因子:

dt[, Vwa := cumsum(Price * Volume)/cumsum(Volume)] 
dt 
# Position Price Volume Vwa 
#1:  1 50  10 50.0 
#2:  2 45  10 47.5 
#3:  3 40  10 45.0 
+1

太棒了!確切地說,我在找什麼。是的,「位置」包含唯一值並進行排序。我之前實際上使用過'cumsum',但只是純粹的總和。將它應用於兩個向量的乘積是有意義的。感謝你! – schluk5