2016-09-24 21 views
0

我有一個距離矩陣,行和列由第一個下劃線(例如,7A_0_AAGCCTAGCGAC = 0)後面的數字值表示。我想要一種方式來比較這些值的行列方式。比如說,我想從列分隔符中減去行分隔符。通過減去行和列名稱分隔符創建數據幀

輸入:

    7A_0_AAGCCTAGCGAC 7A_4_AAATGACTGGCC 7A_7_CATCTCGTTCTA 
7A_0_AAGCCTAGCGAC  0.00000000  0.034312102  0.04539427 
7A_4_AAATGACTGGCC  0.03431210  0.000000000  0.01422137 
7A_7_CATCTCGTTCTA  0.04539427  0.014221369  0.00000000 

預期輸出:

    7A_0_AAGCCTAGCGAC 7A_4_AAATGACTGGCC 7A_7_CATCTCGTTCTA 
7A_0_AAGCCTAGCGAC  0.00000000    -4    -7 
7A_4_AAATGACTGGCC     4  0.000000000    -3 
7A_7_CATCTCGTTCTA     7     3  0.00000000 

任何幫助將非常感激。

回答

1

您可以分別提取了列名和行名的數值,然後做一個外減法:

# extract numeric values from the dimension names of the matrix 
cols = as.numeric(sub(".*_(\\d+)_.*", "\\1", colnames(mat))) 
rows = as.numeric(sub(".*_(\\d+)_.*", "\\1", rownames(mat))) 

# calculate an outer subtract from the two vectors 
output <- outer(cols, rows, "-") 

# set up the dimension name 
dimnames(output) <- list(rownames(mat), colnames(mat)) 

output 
#     7A_0_AAGCCTAGCGAC 7A_4_AAATGACTGGCC 7A_7_CATCTCGTTCTA 
#7A_0_AAGCCTAGCGAC     0    -4    -7 
#7A_4_AAATGACTGGCC     4     0    -3 
#7A_7_CATCTCGTTCTA     7     3     0 
+0

一個相關的問題:有沒有辦法比較的二進制意義上的分隔符(如值匹配然後0,值不匹配,然後1)? – user2117258

相關問題