Soc*_*ers 3 javascript arrays reduce d3.js
我有大约 300 个数组,每个数组都有 100 个 x 和 y 值数组。我想为 300 个数组的 y 值获得一个 100 均值的数组。做这个的最好方式是什么?我相信我应该使用某种减少但有点迷失。这是我到目前为止所拥有的:
let yval = cohort.map((d, i) => {
let bin = d3.nest()
.key(function(d) {
return i;
})
.rollup(function(d) {
return d;
})
.entries(d);
return bin;
});
console.log(yval);
Run Code Online (Sandbox Code Playgroud)
'cohort' 是一个对象数组。我想隔离每个群组对象中的“bins”数组。每个元素的长度为 117 个元素。对于每个 bins[i],我想从所有 bins 中得到 [i] 的平均值。我想基本上把117的300个数组变成一个117个数组。任何帮助将不胜感激!
D3 已经有一个名为d3.mean的方法,它:
返回给定数字数组的平均值
因此,如果您想获得每个内部数组的平均值,您只需要这个(data原始数组在哪里):
var arrayOfMeans = data.map(d => d3.mean(d));
Run Code Online (Sandbox Code Playgroud)
这是一个基本的演示:
var arrayOfMeans = data.map(d => d3.mean(d));
Run Code Online (Sandbox Code Playgroud)
var data = [
[1, 2, 3, 4, 5],
[10, 20, 30, 40, 50],
[100, 200, 300, 400, 500]
];
var arrayOfMeans = data.map(d => d3.mean(d));
console.log(arrayOfMeans)Run Code Online (Sandbox Code Playgroud)
但是,您的数据结构现在不是很清楚:片段上方的描述(“我有大约 300 个数组,每个数组都有 100 个 x 和 y 值数组”)与片段下方的描述(“'cohort' is一个对象数组。我想隔离每个队列对象中的“bins”数组。每个对象都有 117 个元素长。”)!这很混乱...
因此,假设您有一个数组数组,并且在每个内部数组中您有两个值[x, y],这就是您可以如何使用d3.mean这两种方法,一种用于x值,另一种用于y值:
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
Run Code Online (Sandbox Code Playgroud)
或者,如果您不喜欢文字:
var arrayOfMeans = d3.range(2).map(d => d3.mean(data.map(e => e[d])));
Run Code Online (Sandbox Code Playgroud)
这是演示:
<script src="https://d3js.org/d3.v5.min.js"></script>Run Code Online (Sandbox Code Playgroud)
var arrayOfMeans = [d3.mean(data.map(d => d[0])), d3.mean(data.map(d => d[1]))];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
101 次 |
| 最近记录: |