![](/img/trans.png)
[英]Group by and calculate mean / average of properties in a Javascript array
[英]Calculate moving average by group/column - javascript
我有一個計算移動平均值的函數。 在我正在使用的數組中,有一個組變量(部門)在當前函數中被模糊在一起。 我想按組進行ma計算。 甚至有可能( 優雅地 ,我可能會補充。我可能會以我的初學者知識來蠻力……)? 稍后(按部門)我會進行一些過濾,但是我想先進行一次計算,然后再進行計算。
有人有一個優雅的解決方案嗎? 如果有比使用map更好的方法,那么也可以。
var movingWindowAvg = function (arr, step) { // ma size = step
return arr.map(function (_, idx) {
var wnd = arr.slice(idx, idx + step);
var result = d3.sum(wnd.map(function(d) { return d.cases; })) / wnd.length; if (isNaN(result)) { result = _; };
var nBeds= d3.sum(wnd.map(function(d) { return d.Beds; })) / wnd.length; if (isNaN(platser)) { platser = _; };
var avd = wnd[0].Department;
if (wnd.length < step) {
console.log(wnd)
}
var tmpDate = wnd[wnd.length-1].datum; //Test to get the date-markers correct
return {Cases: result, Date: tmpDate, Beds: nBeds, Department: avd, };
});
};
最后,我找不到按組進行此操作的任何好方法,並且在原始ds中包含未編輯的值可能會有所益處(例如,如果我想使是否切換為ma成為可能)
這是最終的代碼,之后我使用slice刪除未定義的對象:
var movingWindowAvg = function (arr, step) { // Window size = step
return arr.map(function (_, idx) {
var wnd = arr.slice(idx, idx + step);
counter = Object_size(wnd);
if (counter == step) {
var result = d3.sum(wnd.map(function(d) { return d.persons; })) / wnd.length; if (isNaN(result)) { result = _; };
var nbeds= d3.sum(wnd.map(function(d) { return d.beds; })) / wnd.length; if (isNaN(nbeds)) { nbeds= _; };
var tmpavd = wnd[0].Dep;
var tmpDate = wnd[step-1].datum;
return {Persons: result, date: tmpDate, Beds: nbeds, Department: tmpavd , };
}
});
更新Object_size函數:
Object_size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
} return size;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.