排除 reductio.avg() 中的 "missing" 值
excluding "missing" values in reductio.avg()
我希望使用 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;
}
};
}
有没有办法使用 reductio 来做到这一点?也许使用异常聚合?我还没有完全理解异常在 reductio 中是如何工作的。
我认为你应该能够对 'myAttr' 进行平均,不包括 null 和 undefined,方法是:
reductio()
.filter(function(d) { return d[myAttr] !== null && d[myAttr] !== undefined; })
.avg(function(d) { return d[myAttr]; });
如果没有按预期工作,请提出问题,因为这是一个错误。
我希望使用 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;
}
};
}
有没有办法使用 reductio 来做到这一点?也许使用异常聚合?我还没有完全理解异常在 reductio 中是如何工作的。
我认为你应该能够对 'myAttr' 进行平均,不包括 null 和 undefined,方法是:
reductio()
.filter(function(d) { return d[myAttr] !== null && d[myAttr] !== undefined; })
.avg(function(d) { return d[myAttr]; });
如果没有按预期工作,请提出问题,因为这是一个错误。