![](/img/trans.png)
[英]What is the best way to combine multiple csv files data input using d3.csv in d3.json ?
[英]d3.csv modifying the input data
我正在使用d3.tsv來解析文件。 我想將data(PValue列)的一列中的所有零更改為該列中的下一個最低編號。 我相信這樣做的正確方法是使用訪問器函數,但到目前為止,我的嘗試都失敗了。
d3.tsv(filename, modifyData, function(error, data) {
data.forEach(function(d) {
d.NAME = d.NAME;
d.logFC = +d.logFC;
d.logCPM = +d.logCPM;
d.FDR = +d.FDR;
d.PValue = +d.PValue
});
})
當我嘗試在訪問器函數ModifyData中執行類似以下操作時,出現錯誤,表明上面的代碼中未定義“數據”。
function modifyData(d){
d.forEach(function(origData){
origData.PValue = +origData.PValue
pValue_array.push(origData.PValue)
})
var pValue_array = []
for (var i = pValue_array.length-1 ; i >= 0; i--){
if (pValue_array[i] === 0){
pValue_array.splice(i,1);
}
}
var newPzero = (arrayMin(pValue_array))
return d;
};
arrayMin是一個簡單的函數,它返回數組中的最小值。 我打算使用該值替換PValue列中的所有0。 非常感謝您的幫助!
您可以先找到最小值,然后替換為0:
d3.tsv('data.tsv', function(error, data) {
//Option A
// smallest = d3.min(data, function(d) {return +d.PValue || Infinity; })
//Option B
var noZeroes = data.filter(function(d) { return +d.Data !== 0; });
var smallest = d3.min(noZeroes, function(d) { return d.Data; })
data.forEach(function(d) {
d.NAME = d.NAME;
d.logFC = +d.logFC;
d.logCPM = +d.logCPM;
d.FDR = +d.FDR;
if (+d.PValue == 0 ) {
d.Data = +smallest;
} else {
d.PValue = +d.PValue
}
});
console.table(data);
})
不要忘記數字值的“ +”,否則JS會將其視為字符串,您的比較將會失敗。
您可以使用d3.min從數據集中獲取最小值。
例如
d3.tsv(filename, function(error, data) {
data.forEach(function(d) {
d.NAME = d.NAME;
d.logFC = +d.logFC;
d.logCPM = +d.logCPM;
d.FDR = +d.FDR;
d.PValue = +(d.PValue || d3.min(data, function(d) { return d.PValue || Infinity; }));
});
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.