簡體   English   中英

按組/列計算移動平均值-javascript

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM