我有一个csv文件,其中包含三列:
College,Undergraduate,IOP
Science,1,Yes
Science,3,No
Arts,2,Yes
Arts,1,No
Science,2,Yes
我想创建一个变量:[{type: "Arts", Applied: 2},{type:"Science",Applied:3}]
。我只想将IOP的希望值加起来是
我的代码:
function csvToJSONUSPstudents(csv){
d3.csv(csv, function(error, csv_data) {
if (error) throw error;
var datas = d3.nest()
.key(function(d) { return d.College;})
.rollup(function(d) {
return {
Applied: d3.sum(d, function (g) {
return g.Applied;
}),
};
}).entries(csv_data);
var data = [];
var x = {};
for (var i = 0 ; i< datas.length;i++){
x = {type:datas[i].key ,
Applied:datas[i].values.Applied}
data.push(x)
}
console.log(data);
});
}
答案 0 :(得分:0)
d3.nest
不太适合您的情况。问题在于d3.nest
将生成具有以下特定结构的数组:
[{key: foo, values: [],
{key: baz, values: [],
{key: baz, values: []];
不仅结构是固定的,甚至属性名称(key
和values
也无法更改。
因此,根据您的情况,建议使用自定义功能。例如:
const csv = `College,Undergraduate,IOP
Science,1,Yes
Science,3,No
Arts,2,Yes
Arts,1,No
Science,2,Yes`;
let data = d3.csvParse(csv);
data = data.filter(function(d) {
return d.IOP === "Yes"
}).reduce(function(a, c) {
const found = a.find(function(e) {
return c.College === e.type;
});
if (found) {
found.Applied += c.Undergraduate;
} else {
a.push({
type: c.College,
Applied: c.Undergraduate
})
};
return a;
}, []);
console.log(data)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>