d3汇总将字符串拆分为多个

时间:2016-04-08 12:54:59

标签: javascript d3.js

平, 我的数据看起来像这样:

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的方法是什么。我在网上找不到任何例子......

1 个答案:

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