不包括“missing"reduce .avg()中的值

excluding "missing" values in reductio.avg()

本文关键字:avg reduce missing quot 不包括      更新时间:2023-09-26

我希望使用reductio来计算交叉过滤组中的平均值。我的数据集包括在计算平均值时想要排除的缺失值(用null表示)。但是,我没有看到告诉reductio排除某些值的方法,并且它将null值视为0。

我编写了一个自定义的reduce函数来完成这个任务,而不使用reductio:

function reduceAvg(attr) {
    return {
        init: function() {
            return {
                count: 0,
                sum: 0,
                avg: 0
            };
        },
        add: function(reduction, record) {
            if (record[attr] !== null) {
                reduction.count += 1;
                reduction.sum += record[attr];
                if (reduction.count > 0) {
                    reduction.avg = reduction.sum / reduction.count;
                }
                else {
                    reduction.avg = 0;
                }
            }
            return reduction;
        },
        remove: function(reduction, record) {
            if (record[attr] !== null) {
                reduction.count -= 1;
                reduction.sum -= record[attr];
                if (reduction.count > 0) {
                    reduction.avg = reduction.sum / reduction.count;
                }
                else {
                    reduction.avg = 0;
                }
            }
            return reduction;
        }
    };
}

是否有一种方法可以使用还原来做到这一点?也许可以使用异常聚合?我还没有完全理解异常是如何在简化中工作的

我认为你应该能够平均'myAttr'排除null和未定义的做法:

reductio()
  .filter(function(d) { return d[myAttr] !== null && d[myAttr] !== undefined; })
  .avg(function(d) { return d[myAttr]; });

如果没有像预期的那样工作,请提交一个问题,因为这是一个bug。