使用交叉过滤器/还原计算平均值

我试图计算平均每小时驾车的平均里程数。 我有一个样例数据集,如下所示:

[{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

下一篇: How to delete the repeated data in crossfilter?