假设我有一个像这样的csv文件:
decade,year,cat1,cat2,cat3
1970,1971,2,3,6
1970,1972,3,8,4
1980,1981,5,8,7
1980,1982,9,2,4
1990,1991,7,9,5
1990,1992,9,5,6
我希望按"十年"对数据进行分组,删除"年份列",并添加" cat"柱。因此,最终数组看起来像在堆积条形图中使用:
decade,cat1,cat2,cat3
1970,5,11,10
1980,14,10,11
1990,16,14,11
答案 0 :(得分:0)
您可以使用d3.nest
和d3.rollup
来完成此操作。我们可以通过设置十年作为我们的关键,然后根据十年滚动/总结猫值来嵌套。生成的键值对将包括十进制作为键,值对象包含所有3个总计的cat值。查看下面的代码段:
var data = d3.csv.parse(d3.select('#data_csv').text());
var valuesByDecade;
data.forEach(function(d){
//group and organize your data as needed here
valuesByDecade = d3.nest()
//set the decade as your key
.key(function(d) {return d["decade"];})
//rollup and sum your cat values by decade
.rollup((function(d) {
return {
cat1: d3.sum(d, function(e) { return e["cat1"]; }),
cat2: d3.sum(d, function(e) { return e["cat2"]; }),
cat3: d3.sum(d, function(e) { return e["cat3"]; }),
};
}))
.entries(data);
});
console.log(valuesByDecade)

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
<pre id='data_csv'>decade,year,cat1,cat2,cat3
1970,1971,2,3,6
1970,1972,3,8,4
1980,1981,5,8,7
1980,1982,9,2,4
1990,1991,7,9,5
1990,1992,9,5,6
</pre>
&#13;