2016-09-24 4 views
0

最初のアンダースコアの後に表示される数値で区切られた行と列の距離行列を持っています(例:7A_0_AAGCCTAGCGAC = 0)。私は行と列の方法でこれらの値を比較する方法が欲しいです。たとえば、列区切り記号から行区切り文字を減算したいとします。行と列の名前の区切り文字を減算してdata.frameを作成します

入力:

    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

関連する問題