javascript - 排除reductio.avg()中的 "missing"值

标签 javascript crossfilter reductio

我希望使用 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;
        }
    };
}

有没有办法使用reductionio来做到这一点?也许使用异常聚合?我还没有完全理解异常在 reduction 中是如何工作的。

最佳答案

我认为你应该能够通过执行以下操作对“myAttr”进行平均,排除 null 和 undefined:

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

如果这没有按预期工作,请提交问题,因为它是一个错误。

关于javascript - 排除reductio.avg()中的 "missing"值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32543604/

相关文章:

javascript - 优雅地切换许多功能

JavaScript window.onbeforeunload 不是每次都触发

javascript - 当div到达页面一定高度时

dc.js - 我可以根据 crossfilter/dc.js 中的交集(和)过滤数据吗?

dc.js - 如何从 crossfilter/reductionio 中的组创建组?

javascript - 如何在 dc.js 中为多标签数据制作行图

javascript - 图像尺寸和文件大小之间有关系吗?

javascript - DC.js,crossfilter - 在 groupAll() 上运行 reduce()

javascript - 如何通过 ID 有效地从交叉过滤器中删除/修改数据

javascript - 如何在 dc.js/reductio/crossfilter 中生成滚动标准折线图