gpt4 book ai didi

javascript - 使用 d3.nest 根据特定键对值求和并按另一个键过滤

转载 作者:行者123 更新时间:2023-11-30 06:16:43 26 4
gpt4 key购买 nike

我有一个包含三列的 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 希望值是 Yes

我的代码:

         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);


});







}

最佳答案

d3.nest 不适合您的情况。问题是 d3.nest 将生成具有这些特定结构的数组:

[{key: foo, values: [],
{key: baz, values: [],
{key: baz, values: []];

不仅结构是固定的,连属性名(keyvalues 也不能改变。

因此,对于您的情况,我建议使用自定义函数。例如:

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>

关于javascript - 使用 d3.nest 根据特定键对值求和并按另一个键过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695622/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com