使用交叉过滤器/还原计算平均值
我试图计算平均每小时驾车的平均里程数。 我有一个样例数据集,如下所示:
[{date: 1/1/2017, hour: 9, car: 12, miles: 5},
{date: 1/1/2017, hour: 9, car: 13, miles: 82},
{date: 1/2/2017, hour: 9, car: 13, miles: 17},
{date: 1/2/2017, hour: 10, car: 12, miles: 15},
{date: 1/2/2017, hour: 10, car: 13, miles: 2}]
结果数据集应该是:
[{hour: 9, averageMiles: 27.25},
{hour: 10, averageMiles: 8.5}]
使用这个问题,我能够想出一个可行的解决方案。 然而,它似乎相当冗长,我想知道是否有更好的方法来做到这一点,也许使用reductio。 这是我提出的解决方案的主要部分。 看到下面的提琴完整的解决方案。
grp1 = hourDimension.group().reduce(
function(p, v) { // add
var car = v.car;
var mappedCar = p.map.has(car) ? p.map.get(car) : {
count: 0,
sum: 0,
avg: 0
}
mappedCar.count += 1;
mappedCar.sum += v.miles;
mappedCar.avg = mappedCar.sum / mappedCar.count;
p.map.set(car, mappedCar);
p.avg = average_map(p.map);
return p;
},
function(p, v) { // remove
...
},
function() { // init
return {map: d3.map(), avg: 0};
}
);
这是一个显示结果的工作小提琴。
链接地址: http://www.djcxy.com/p/32821.html上一篇: Calculate average of average using crossfilter/reductio