2016-11-17 32 views
0

我想將線性錶轉換爲矩陣格式。線性表到矩陣格式

我的輸入表看起來是這樣的,被稱爲「linear_table.tab」:

      Transcript_1 Transcript_2 Transcript_3 Transcript_4 Transcript_5 Transcript_6 Transcript_7 Transcript_8 Transcript_9 Transcript_10 Transcript_11 Transcript_12 Transcript_13 Transcript_14 Transcript_15 Transcript_16 
       Transcript_1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 
       Transcript_2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 
       Transcript_3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_4 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 
       Transcript_5 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 
       Transcript_6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_7 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_9 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_10 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_11 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_14 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_15 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
       Transcript_16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

這裏是,使用R我的代碼:

transcript  ortho 
Transcript_1 ORTHO_1 
Transcript_2 ORTHO_2 
Transcript_3 ORTHO_3 
Transcript_4 ORTHO_4 
Transcript_5 ORTHO_5 
Transcript_6 ORTHO_6 
Transcript_7 ORTHO_5 
Transcript_8 ORTHO_1 
Transcript_9 ORTHO_4 
Transcript_10 ORTHO_5 
Transcript_11 ORTHO_2 
Transcript_12 ORTHO_7 
Transcript_13 ORTHO_8 
Transcript_14 ORTHO_5 
Transcript_15 ORTHO_2 
Transcript_16 ORTHO_9 

什麼,我想我的矩陣表像看:

linear.table <- read.table("linear_table.tab", header=T, sep="\t") 
    library(reshape2) 
    dcast(linear.table, transcript~ortho, fill=0) 

我得到的R以下的輸出:

   transcript ORTHO_1 ORTHO_2 ORTHO_3 ORTHO_4 ORTHO_5 ORTHO_6 ORTHO_7 ORTHO_8 ORTHO_9 
     Transcript_1 ORTHO_1  0  0  0  0  0  0  0  0 
     Transcript_10  0  0  0  0 ORTHO_5  0  0  0  0 
     Transcript_11  0 ORTHO_2  0  0  0  0  0  0  0 
     Transcript_12  0  0  0  0  0  0 ORTHO_7  0  0 
     Transcript_13  0  0  0  0  0  0  0 ORTHO_8  0 
     Transcript_14  0  0  0  0 ORTHO_5  0  0  0  0 
     Transcript_15  0 ORTHO_2  0  0  0  0  0  0  0 
     Transcript_16  0  0  0  0  0  0  0  0 ORTHO_9 
     Transcript_2  0 ORTHO_2  0  0  0  0  0  0  0 
     Transcript_3  0  0 ORTHO_3  0  0  0  0  0  0 
     Transcript_4  0  0  0 ORTHO_4  0  0  0  0  0 
     Transcript_5  0  0  0  0 ORTHO_5  0  0  0  0 
     Transcript_6  0  0  0  0  0 ORTHO_6  0  0  0 
     Transcript_7  0  0  0  0 ORTHO_5  0  0  0  0 
     Transcript_8 ORTHO_1  0  0  0  0  0  0  0  0 
     Transcript_9  0  0  0 ORTHO_4  0  0  0  0  0 

我不知道如何在這方面使用R.

回答

0

使用awk着手:

$ cat ortho.awk 
NR > 1 { 
    transcript = $1; 
    ortho = $2; 
    i = transcript; 
    j = ortho; 
    sub("Transcript_", "", i); 
    sub("ORTHO_", "", j); 
    imx[i][j] = 1; 
} 
END { 
    for (i in imx) { 
    for (j in imx) { 
     omx["Transcript_"+i]["Transcript_"+j] = imx[i][j] == "" ? 0 : 1; 
    } 
    } 

    printf("\t"); 
    for (i in omx) { 
    printf "\tTranscript%d", i; 
    } 
    print ""; 

    for (i in omx) { 
    printf "Transcript%d", i; 
    for (j in omx) { 
     printf "\t%d", omx[i][j]; 
    } 
    print ""; 
    } 

} 

想法是填充1的的稀疏矩陣,然後在結束與填充0在失蹤點。然後打印出來。

+0

這只是創建一個只有0的矩陣。它不包括1. – biobudhan

+0

我有'BEGIN {FS =「\ t」}'這是不必要的,我猜你的數據沒有標籤。 awk的默認FS是覆蓋標籤和非標籤情況的空白。 –

+0

我剛剛檢查了我的數據的製表符空間。它仍然給了我相同的輸出。 我跑它使用: 'awk -f ortho.awk linear_table.tab' – biobudhan