2016-06-30 13 views
0

ファイルを解析するのにd3.tsvを使用しています。データの1つの列(PValue列)のすべての0をその列の次の最小番号に変更したいとします。私はこれを行う正しい方法は、アクセサー関数を使用することだと考えていますが、私の試みはこれまでに失敗しました。d3.csv入力データの変更

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で次のようなことをしようとすると、上記のコードで 'data'が定義されていないというエラーが表示されます。

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

最小値除外0が必要です。ここを見てください:http://stackoverflow.com/questions/29261994/use-d3-min-to-find-lowest-value-that -is-not-0である。 0が表示されたときに最小値を置き換えるだけです。 – Klaujesi

+0

@Klaujesiはい、0の部分を置き換えるのに問題があります。 –

答えて

1

例えば

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として、それを考慮し、「+」数値のことを忘れないでください。あなたの比較は失敗します.-

+1

d.Dataをd.PValueに置き換えていただきありがとうございます。 –

0

d3.minを使用して、データセットから最小値を取得できます。あなたが最初のmin値を検索し、0を置き換えることができます

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; })); 
    }); 
}) 
関連する問題