R:data.table中的累积加权平均值

时间:2016-11-28 13:48:42

标签: r data.table weighted-average accumulate

Basis是以下数据表:

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 个答案:

答案 0 :(得分: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