平, 我的数据看起来像这样:
form
现在我想把它放到像这样的d3汇总中:
Datum,Name,Kategorie,Betrag
01/10/15,,Lohn,1586,7
02/10/15,,lunch,-4,55
....
...
..
.
工作得很好。现在我要做的是在汇总中为日,月和年(作为整数)分别设置一个值,这意味着在汇总中我想再次访问“基准”字段,但我不能这样做。我尝试了多种类似的东西
d3.csv("mein-budget-export.csv", type, function(error, data) {
var summedData = d3.nest()
.key(function(d) {
//console.log(d.Datum);
return d.Datum;
})
.rollup(function(v) { return {
total: d3.sum(v, function(d) { return d.Betrag; }),
category: v.map(function(d){
return d.Kategorie;
}),
};
})
.entries(data);
当我在值内查看检查器时,我得到day: function(d){return parseInt(d.Datum.substring(0, 2));}
而不是例如15
可能这很容易,但我是d3的新手,所以我还不太明白......
提前感谢您的帮助!
编辑:
显然,主要问题在于如何直接在汇总内访问值。只是day: function(d)
不起作用,因为d未定义。 d.Datum
也未定义。那么在汇总中直接访问Datum的方法是什么。我在网上找不到任何例子......
答案 0 :(得分:1)
无需将代码包装在函数中。因为函数永远不会被调用,所以它会将对函数的引用绑定到day
,这是您在检查输出时看到的结果。您的rollup()
函数应如下所示:
.rollup(function(v) {
var datum = v[0].Datum;
return {
day: parseInt(datum.substr(0, 2)),
month: parseInt(datum.substr(3, 2)),
year: parseInt(datum.substr(6, 2)),
total: d3.sum(v, function(d) { return d.Betrag; }),
category: v.map(function(d) { return d.Kategorie; }),
};
})