2017-10-12 50 views
1

我有这样一个数据集:所述状态栏下D3热图列标题YAXIS

CT, CA, GA, TX, Year, Month 
1, 1, 2, 4, 2016, 03 
2, 1, 3, 5, 2016, 03 

中的数字对应于出现次数。 我加载数据到D3,但我怎么能重新组织数据是仅有4列,就像这样:

state, count, year, month 
CT, 1, 2016, 03 

这里是我迄今有:

d3.csv("states.csv", function(error, Data){ 

      Data.forEach(function(d){ 
       d.CT = +d.CT; 
       d.CA = +d.CA; 
       d.GA = +d.GA; 
       d.TX = +d.TX; 
       d.Year = +d.Year; 
       d.month = +d.month; 

     }); 

回答

1

如果我没有理解所需输出阵列正确的forEachfor...in这种组合可以创建它:

var csv = `CT,CA,GA,TX,Year,Month 
 
1,1,2,4,2016,03 
 
2,1,3,5,2016,03`; 
 

 
var data = d3.csvParse(csv); 
 

 
var newData = []; 
 

 
data.forEach(function(d) { 
 
    for (var key in d) { 
 
    if (key != "Year" && key != "Month") { 
 
     newData.push({ 
 
     state: key, 
 
     count: d[key], 
 
     year: d.Year, 
 
     month: d.Month 
 
     }) 
 
    } 
 
    } 
 
}); 
 

 
console.log(newData);
<script src="https://d3js.org/d3.v4.min.js"></script>

由于我无法在堆栈片段中加载真正的CSV,因此我将示例数据集存储在变量中,并使用d3.csvParse进行解析。但是,原理是一样的:只需将该函数放入d3.csv回调中即可。

PS:根据您所需的输出的例子...

state, count, year, month 
CT, 1, 2016, 03 

...我假设你不想与同年份和月份总结对象。如果你真的想要总结它们,请发表另一个问题,询问如何做(或者做一个搜索,因为这是一个常见问题,已经回答了)。

+0

谢谢!我加载了我的数据并检查了日志,它在控制台中显示了一个空数组。它还表示newData [0]在我尝试显示它时未定义。有什么不同的需要在.push函数中完成? – ajax2000

+0

那么,我必须看到确切的代码。用代码和CSV设置一个Plunker或Blockbuilder。 –

+0

http://blockbuilder.org/ajax2000/87c95d6706e43a868df5cc035c49f9ab – ajax2000