gpt4 book ai didi

javascript - 对字符串和数字使用汇总

转载 作者:行者123 更新时间:2023-11-30 19:37:40 25 4
gpt4 key购买 nike

我正在处理以下数据集:

Landen,"Perioden","SITC","Onderwerpen_1","Waarde eenheid","Waarde"
Afghanistan,"2012","0 Voeding en levende dieren","Invoerwaarde","mln euro","1"
Afghanistan,"2012","1 Dranken en tabak","Invoerwaarde","mln euro","0"
Afghanistan,"2012","2 Grondstoffen niet eetbaar behalve...","Invoerwaarde","mln euro","."
Afghanistan,"2012","3 Minerale brandstoffen smeermiddele...","Invoerwaarde","mln euro","."
Afghanistan,"2012","4 Dierlijke en plantaardige oliën en ...","Invoerwaarde","mln euro","."
Afghanistan,"2012","5 Chemische producten","Invoerwaarde","mln euro","0"
Afghanistan,"2012","6 Fabricaten hoofdzakelijk gerangschi...","Invoerwaarde","mln euro","0"
Afghanistan,"2012","7 Machines en vervoermaterieel","Invoerwaarde","mln euro","1"
Afghanistan,"2012","8 Diverse gefabriceerde goederen","Invoerwaarde","mln euro","1"
Afghanistan,"2012","9 Niet afzonderlijk genoemde goederen","Invoerwaarde","mln euro","0"

我做的第一件事是更改所有不是“.”的“Waarde”值。像这样变成整数:

for (let i = 0; i < dataTotal.length; i++) {
if (dataTotal[i].Waarde != ".") {
dataTotal[i].Waarde = parseInt(dataTotal[i].Waarde);
}
}

然后我使用 d3.nest 创建一个新的更有用的数组,如下所示:

nested_data = d3.nest()
.key(function (d) {
return d.SITC;
})
.rollup(function (d) {
return d3.sum(d, function (e) {
return e.Waarde
});
});
.entries(dataTotal);

结果如下:

img1

如您所见,d3.sum 更改了“.”值为 0,这是有道理的。但是,当 dataTotal.Waarde 是一个数字时,我希望汇总返回一个数字,并返回一个带有“.”的字符串。当它不是。我尝试了以下方法:

nested_data = d3.nest()
.key(function (d) {
return d.SITC;
})
.rollup(function (d) {
if (typeof dataTotal.Waarde == "number") {
return d3.sum(d, function (e) {
return e.Waarde
});
} else if (typeof dataTotal.Waarde == "string"){

}
})
.entries(dataTotal);

这是结果:

img2

现在它为所有值返回 undefined。我如何解决这个问题,我希望汇总返回 dataTotal.Waarde 是数字的数字并返回字符串“。”它在哪里?

最佳答案

根据您的comment你根本不需要 d3.nest() !您可以使用简单的 map 创建您想要的数组, 使用 unary plus将字符串转换为数字并在 "." 的情况下测试 NaN:

const nested = data.map(function(d) {
return {
key: d.SITC,
value: +d.Waarde === +d.Waarde ? +d.Waarde : d.Waarde
};
});

这是一个演示:

const csv = `Landen,"Perioden","SITC","Onderwerpen_1","Waarde eenheid","Waarde"
Afghanistan,"2012","0 Voeding en levende dieren","Invoerwaarde","mln euro","1"
Afghanistan,"2012","1 Dranken en tabak","Invoerwaarde","mln euro","0"
Afghanistan,"2012","2 Grondstoffen niet eetbaar behalve...","Invoerwaarde","mln euro","."
Afghanistan,"2012","3 Minerale brandstoffen smeermiddele...","Invoerwaarde","mln euro","."
Afghanistan,"2012","4 Dierlijke en plantaardige oliën en ...","Invoerwaarde","mln euro","."
Afghanistan,"2012","5 Chemische producten","Invoerwaarde","mln euro","0"
Afghanistan,"2012","6 Fabricaten hoofdzakelijk gerangschi...","Invoerwaarde","mln euro","0"
Afghanistan,"2012","7 Machines en vervoermaterieel","Invoerwaarde","mln euro","1"
Afghanistan,"2012","8 Diverse gefabriceerde goederen","Invoerwaarde","mln euro","1"
Afghanistan,"2012","9 Niet afzonderlijk genoemde goederen","Invoerwaarde","mln euro","0"`;

const data = d3.csvParse(csv);

const nested = data.map(function(d) {
return {
key: d.SITC,
value: +d.Waarde === +d.Waarde ? +d.Waarde : d.Waarde
};
});

console.log(nested)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

关于javascript - 对字符串和数字使用汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762323/

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