2016-11-28 129 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