【问题标题】:Calculate moving average by group/column - javascript按组/列计算移动平均值 - javascript
【发布时间】:2014-09-09 09:17:06
【问题描述】:

我有一个计算移动平均线的函数。在我使用的数组中,有一个组变量(部门)在当前函数中被模糊在一起。我想改为按组进行 m​​a 计算。这甚至可能吗(优雅,我可能会补充。我可能会用我的初学者知识强行强制它......)?我稍后会(按部门)进行一些过滤,但我希望先完成一次计算,然后再完成。

有人有优雅的解决方案吗?如果有比使用地图更好的方法来做到这一点,那也没关系。

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, }; 
    });
};

【问题讨论】:

    标签: javascript arrays d3.js grouping moving-average


    【解决方案1】:

    最后我没有找到任何按组执行此操作的好方法,并且在原始 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; 
                    };
    

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2020-08-23
      • 2021-07-07
      • 2019-04-19
      相关资源
      最近更新 更多