我希望使用约简来计算交叉过滤器组内的平均值。我的数据集包括丢失的值(用null表示),在计算平均值时我要排除这些值。但是,我看不出有一种方法可以告诉reductio排除某些值,而且它将null值视为0。
我编写了一个自定义的约简函数来完成这一任务,而不使用还原:
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;
}
};
}有没有办法用还原术来做这件事?也许使用异常聚合?我还没有完全意识到异常在还原术中是如何工作的。
发布于 2015-09-13 00:22:46
我认为您应该能够通过执行以下操作来平均超过“myAttr”(不包括null和未定义):
reductio()
.filter(function(d) { return d[myAttr] !== null && d[myAttr] !== undefined; })
.avg(function(d) { return d[myAttr]; });如果不像预期的那样工作,请提交一个问题,因为它是一个错误。
https://stackoverflow.com/questions/32543604
复制相似问题