2011-04-04 59 views
2

我想列與節點轉換爲標頭以矩陣下面爲它們相應的基因如下:R或MATLAB - 匹配列名修改相應單元以矩陣

NODE Gene1 Gene2 Gene3 Gene4 Gene5 NODE1 NODE2 NODE3 
1 NODE1 0.98 0.98 NA NA NA NA NA NA 
2 NODE2 NA NA 0.8 0.8 NA NA NA NA 
3 NODE3 NA NA NA NA 0.72 0.72 NA NA 
4 NODE4 NA NA NA NA NA NA 0.6 0.6 

作爲

NODE1 = Gene1 and Gene2 
NODE2 = Gene3 and Gene4 
NODE3 = Gene5 and NODE1 = Gene5 and Gene 1 and Gene2 

我想在NODE1 2,3兩個節點列細胞移動到其相應的基因colunms輸出像這樣的文件:

NODE Gene1 Gene2 Gene3 Gene4 Gene5 
1 NODE1 0.98 0.98 NA NA NA  
2 NODE2 NA NA 0.8 0.8 NA  
3 NODE3 0.72 0.72 NA NA 0.72  
4 NODE4 0.6 0.6  NA 0.6 0.6 

有沒有這樣做的方法?我可以使用R或MATLAB來做到這一點嗎?

最好的問候,

凱瑟琳

+2

是的,你可以... – Andrie 2011-04-04 15:47:06

+1

我不能說我完全理解你想要的輸出。 'NODE4'對應的是什麼? – 2011-04-04 15:53:55

+0

Node4代表節點2和節點3。所以它們也代表了node2和node3中的相應基因。你能介意給我一些指導如何與R做? – Catherine 2011-04-05 22:08:52

回答

1

在Matlab中,你可以做這樣的:

clear all 
    nrgenes=5; 
    nrnodes=4; 
    matrix=zeros(nrnodes,nrgenes+nrnodes); 
    matrix(1,1:2)=0.98; 
    matrix(2,3:4)=0.8; 
    matrix(3,5:6)=0.72; 
    matrix(4,7:8)=0.6; 

    for i=1:nrnodes 
     for j=nrgenes+1:nrgenes+nrnodes 
      if (matrix(i,j)~=0) 
       matrix(i,1:nrgenes)=matrix(i,1:nrgenes)+matrix(i,j)*logical(matrix(j-nrgenes,1:nrgenes)); 
      end 
     end 
    end 
    result=matrix(1:nrnodes,1:nrgenes); 

一些注意事項:

  • 您可能到運行兩次這展開所有條目取決於條目的配置,但我認爲你知道如何去做來自代碼。

  • 您的示例結果的Node4行中存在輕微錯誤。

  • 這是用兩個嵌套for循環編碼。對於大型矩陣來說速度慢,效率低,但更容易理解。您可能必須對大矩陣進行矢量化以提高執行時間。