【问题标题】:dc.js: how to reduceCount on an object element list?dc.js:如何减少对象元素列表上的计数?
【发布时间】:2016-06-27 21:50:07
【问题描述】:

我有一个类似的对象:

[    { "Project": 1;  "key":["a", "b", "c", "d"]},
     { "Project": 2;  "key":["b", "c", "d"]},
     { "Project": 3;  "key":["e", "c", "a"]},
     { "Project": 4;  "key":["b", "a", "e", "f"]}        
 ]

就我所实现的而言,reduceCount 只计算单个元素值的出现。我想把它改成什么东西

key     value
a        3
b        3
c        3
d        2
e        2
f        1

我想计算它出现在单个项目中的次数,例如“a”出现在 3 个项目中。实际上,我想在我的 wordcloud 中使用这些数据。

我可以在交叉过滤器之外执行此操作,但不确定如何通过交叉过滤器维度实现此目的。

任何帮助都是可观的。


Ethan Jewett 提出的解决方案

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

【问题讨论】:

    标签: javascript dc.js crossfilter


    【解决方案1】:

    如果您想在当前版本的 Crossfilter 中执行此操作,则需要使用 groupAll。这个问题的答案提供了一个例子:Is there a way to tell crossfilter to treat elements of array as separate records instead of treating whole array as single key?

    或者,您可以使用 Reductio 库,它提供了一种非常容易为复杂组生成 reduce 函数的方法,在这种情况下,它以与 dc.js 兼容的方式包装了 groupAll。文档的相关部分在这里:https://github.com/crossfilter/reductio#aggregations-groupall-aggregations-reductio-b-groupall-b-i-groupingfunction-i-

    如果您觉得特别喜欢冒险,可以尝试使用 Crossfilter 分支的主分支 https://github.com/crossfilter/crossfilter。我们最近在dimension 调用中添加了一个新参数,这将导致它完全按照您的描述处理您的数据。文档在这里:https://github.com/crossfilter/crossfilter/wiki/API-Reference#dimension

    【讨论】:

    • 感谢您的建议。我只是想知道如果我必须获得每个计数的相关项目怎么办。就像从示例中一样:'a' 有 COUNT '3' 和 PROJECTS "1,3,4"。我已尝试在多个变量上创建维度,但仍未提供 PROJECT 名称。
    • 你会在你的组键(例如'a')上保留一个项目列表以及计数。这里棘手的部分是,您需要准确跟踪每个项目中有多少当前在组中,并在添加或删除记录时增加/减少计数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2015-01-10
    • 2019-08-09
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多