Javascript 使用d3.js/crossfilter.js计算多列/维度中的唯一值

Javascript 使用d3.js/crossfilter.js计算多列/维度中的唯一值,javascript,d3.js,crossfilter,Javascript,D3.js,Crossfilter,我有一张测验结果表。它作为对象数组导入,其中每个对象表示一个用户答案的集合。 它有一个保存唯一用户id的属性和多个包含其答案的属性。每个属性的关键是问题id,值是答案id 考虑到每次对数据集应用某个过滤器时,所有这些值都应该快速更新,因此,计算每列中每个问题的唯一值的最佳方法是什么,以构建一种直方图。 例如,我们决定只显示对其中一个问题给出特定答案的用户的数据。因此,所有其他摘要应仅针对这一特定用户组生成 每一种可能的方法,比如每次迭代我所有的对象和它们的属性,或者在Crossfilter中创建

我有一张测验结果表。它作为对象数组导入,其中每个对象表示一个用户答案的集合。 它有一个保存唯一用户id的属性和多个包含其答案的属性。每个属性的关键是问题id,值是答案id

考虑到每次对数据集应用某个过滤器时,所有这些值都应该快速更新,因此,计算每列中每个问题的唯一值的最佳方法是什么,以构建一种直方图。 例如,我们决定只显示对其中一个问题给出特定答案的用户的数据。因此,所有其他摘要应仅针对这一特定用户组生成

每一种可能的方法,比如每次迭代我所有的对象和它们的属性,或者在Crossfilter中创建25+维,看起来都很难看。是否有合理的解决方案,或者我应该使用其他数据结构?我们将乐意接受任何关于数据结构优化的建议。谢谢

数据示例:

user_id,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,32,33,34,35
10168,0,0,6,3,1,6,0,0,4,1,2,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
10654,2,0,6,3,3,1,3,0,0,0,3,3,0,-1,1,-1,2,2,3,5,-1,-1,-1,-1,-1,-1
11110,2,0,6,1,1,6,0,0,1,1,3,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
11392,6,0,6,1,2,1,1,3,2,0,3,1,0,-1,1,-1,8,8,3,4,-1,-1,-1,-1,-1,-1
11484,2,6,1,5,0,6,0,0,4,1,3,1,0,-1,1,-1,7,8,3,0,-1,-1,1,0,1,1
长格式的相同数据。似乎不合理的使用,因为文件大小是原来的4倍

id,ques_id,value
10168,7,0
10168,35,-1
10168,34,-1
10168,33,-1
10168,32,-1

对于长表单,您可以使用d3.nest来提问。这将为您提供直方图所需的值。@Larskothoff谢谢,现在就使用它。到目前为止,这是我找到的最好的解决方案。