2016-06-30 4 views
0

d3.tsv를 사용하여 파일을 구문 분석합니다. 데이터의 한 열 (PValue 열)에있는 모든 0을 해당 열의 다음으로 낮은 숫자로 변경하고 싶습니다. 이 작업을 수행하는 올바른 방법은 접근 자 함수를 사용하는 것이지만 내 시도는 지금까지 실패했습니다. 나는 접근 기능 modifyData에 다음과 같은 일을 할 때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 
    }); 
}) 

, 나는 '데이터'위의 코드에서 정의되지 말하는 오류가 발생합니다.

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을 사용하여 데이터 세트에서 최소값을 얻을 수 있습니다. 먼저 최소 값을 찾은 다음 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; })); 
    }); 
})