【发布时间】:2019-04-06 16:46:11
【问题描述】:
我有一个对象数组,每个对象都有多个键值对。我想按第一个键的值进行分组,然后得出聚合平均值和中位数。
我可以通过嵌套和汇总来做到这一点,但仅限于一维。例如,下面的示例按winner 分组,然后为每个子组找到均值/中值,但仅在一个维度上,在这种情况下仅在team.4 上。请问有没有办法一次聚合所有四个team.1, team.2, team.3, team.4?附带说明一下,team.1, team.2, team.3, team.4 事先并不知道。
我想要的输出(但在这方面非常灵活,它只是一个“很高兴拥有”)将是
var avg=[
{ 'winner': 'team.1', 'team.1' : 4, 'team.2' : 5.333, 'team.3': 1, 'team.4': 0.666},
{ 'winner': 'team.2', 'team.1' : 6, 'team.2' : 2.5, 'team.3': 6.5, 'team.4': 0.5}
];
对于中位数也是如此。
谢谢!
<!DOCTYPE html>
<html>
<head>
<!--d3 -->
<script src='https://d3js.org/d3.v4.min.js'></script>
</head>
<body>
<script>
var data = [];
data[0] = {'winner': 'team.1', 'team.1':5, 'team.2':4, 'team.3':1, 'team.4':0},
data[1] = {'winner': 'team.2', 'team.1':5, 'team.2':1, 'team.3':4, 'team.4':1},
data[2] = {'winner': 'team.2', 'team.1':7, 'team.2':4, 'team.3':9, 'team.4':0},
data[3] = {'winner': 'team.1', 'team.1':5, 'team.2':8, 'team.3':0, 'team.4':1},
data[4] = {'winner': 'team.1', 'team.1':2, 'team.2':4, 'team.3':2, 'team.4':1}
var dim = 'team.4';
var out = d3.nest()
.key(function(d) { return d.winner; })
.rollup(function(v) { return {
dimension: dim,
count: v.length,
median: d3.median(v, function(d) { return d[dim]; }),
avg: d3.mean(v, function(d) { return d[dim]; })
}; })
.entries(data);
console.log(out);
</script>
</body>
</html>
【问题讨论】:
标签: javascript d3.js