2016-01-18 44 views
0

我使用d3.nest.rollup来计算我的数据中的叶子。数据来自csv,并由d3转换为json。该CSV看起来是这样的:如何计算d3嵌套汇总中的不同值?

Color,ID,Animal 
Green,1,Dog 
Red,2,Cat 
Red,3,Cat 
Red,3,Dog 

注意,ID#3有2组不同的动物,但我想指望在这个数据中的不同的ID,所以每个颜色应该返回数= 1

简单汇总功能会返回所有叶子的计数,即1,1,2,而我需要按颜色进行分组并计数该组内的不同ID ...

回答

0

您需要执行一个两级下一个(第一个颜色,然后在ID),并在第二组上卷起,如下所示:

var nested_data = d3.nest() 
.key(function(d) { return d.Color; }) 
.key(function(d) { return d.id; }) 
.rollup(function(ids) { 
    return ids.length; 
}) 
.entries(data); 

console.log(nested_data); 

,这将给你:

Console view of rolled-up and nested data

有上窝和汇总在这里有很大的教程:http://bl.ocks.org/phoebebright/raw/3176159/

+0

谢谢!但是,这仍然给我红色的长度= 2 ...而我需要得到红色的长度= 1,因为在红色组中只有一个唯一的ID ... – Pavel

+0

对不起,我不太关注。在问题中使用CSV示例,“绿色”具有一个唯一ID(“1”),“红色”具有两个唯一ID(“2”和“3”)。我错过了什么吗? –

+0

对!我似乎无法复制这实际的数据,其中有很多其他列......我需要在密钥中包含ID列或可以以某种方式绕过它? – Pavel