【问题标题】:dc.js - how to group by unique iddc.js - 如何按唯一 ID 分组
【发布时间】:2014-09-07 14:43:57
【问题描述】:

我正在使用 dc.js 和 crossfilter 从 csv 创建 3 个行图。前两个是直截了当的,但第三个需要将一个维度设置为我的输入 csv 的多个列,所以我已经重组了数据,以便对于该行的每个所需列(存在一个值),一个新的重复行使用在新列下输入的列值创建。见下文;

旧结构:
ID --- rowchart1 --- rowchart2 ---- rowchart3 ----- rowchart3 ----- rowchart3 -----
1
2
3

新结构:
ID --- rowchart1 --- rowchart2 ---- newRowchart3
1
2
2
2
3
3

一切正常,因为我可以将行图设置为这个新构造的列,但我无法将原始计数显示在其他两个列中。实际上,我在其他行图中得到了重复计数。
有没有办法按唯一 ID 进行分组,以便只计算那些唯一 ID 而不是每行计数?
非常感谢

【问题讨论】:

    标签: javascript d3.js dc.js crossfilter


    【解决方案1】:

    请看:Is there a way to tell crossfilter to treat elements of array as separate records instead of treating whole array as single key?

    您的示例是一个稍微简单的示例,因为您没有“rowchart3”值的数组,但该解决方案仍然可以为您工作。

    答案包括一个 jsfiddle,它演示了如何手动管理图表中的类别。你需要改变

    function reduceAdd(p, v) {
       if (v.topics[0] === "") return p;    // skip empty values
       v.topics.forEach (function(val, idx) {
          p[val] = (p[val] || 0) + 1; //increment counts
       });
       return p;
    }
    

    类似

    function reduceAdd(p, v) {
       if(v.rowhart3a != "")
          p[v.rowchart3a] = (p[v.rowchart3a] || 0) + 1; //increment counts
    
       if(v.rowhart3b != "")
          p[v.rowchart3b] = (p[v.rowchart3b] || 0) + 1; //increment counts
    
       if(v.rowhart3c != "")
          p[v.rowchart3c] = (p[v.rowchart3c] || 0) + 1; //increment counts
    
       return p;
    }
    

    我希望这会有所帮助。 -DJ

    【讨论】:

    • 嗨,我现在有一个稍微修改的问题,我需要这些 rowChart3 列中的实际数字而不是计数。我将如何添加这些?另外,如果我没有像链接示例中那样的数组,我将维度设置为什么
    猜你喜欢
    • 2023-02-18
    • 1970-01-01
    • 2021-05-05
    • 2020-09-08
    • 2015-09-04
    • 1970-01-01
    • 2017-01-31
    • 2022-01-11
    • 2022-01-01
    相关资源
    最近更新 更多