2017-12-08 19 views
0

Rで対称行列を作成しようとしていますが、列A = dataSet1と列B = dataSet2が同じ行にまとめて表示されている場合は、行列を1に設定します。しかし、私はRのtcrossprod()関数を理解できないようです。私は非対称行列を作るのにテーブルを使うことができましたが、(対称/正方形)行列では不運です。2列のデータフレームを対称2進行列に変換する

私はこの例に従う試したが、何の成功:私のデータを Building a symmetric binary matrix

structure(list(dataSet1 = c("g14773.t1", "g6302.t1", "g399.t1", 
"g15590.t1", "g2595.t1", "g149.t1"), dataSet2 = c("g6302.t1", 
"g14773.t1", "g482.t1", "g14053.t1", "g1006.t1", "g6302.t1")), .Names = c("dataSet1", 
"dataSet2"), row.names = c(NA, -6L), class = "data.frame") 

私はtcrossprod機能を使用するたびに、私は間違ったバイナリ存在と値を取得するには、不足している:

tcrossprod(table(head(Data))) 
       dataSet2 
    dataSet1 g14773.t1 g149.t1 g15590.t1 g2595.t1 g399.t1 g6302.t1 
    g14773.t1   1  1   0  0  0  0 
    g149.t1   1  1   0  0  0  0 
    g15590.t1   0  0   1  0  0  0 
    g2595.t1   0  0   0  1  0  0 
    g399.t1   0  0   0  0  1  0 
    g6302.t1   0  0   0  0  0  1 

以下のように対称行列にする方法の推奨事項:

structure(list(g14773.t1 = c(0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L), g6302.t1 = c(1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L), g399.t1 = c(0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), g15590.t1 = c(0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L), g2595.t1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L), g149.t1 = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), g482.t1 = c(0L, 
0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L), g14053.t1 = c(0L, 0L, 0L, 1L, 
0L, 0L, 0L, 0L, 0L), g1006.t1 = c(0L, 0L, 0L, 0L, 1L, 0L, 0L, 
0L, 0L)), .Names = c("g14773.t1", "g6302.t1", "g399.t1", "g15590.t1", 
"g2595.t1", "g149.t1", "g482.t1", "g14053.t1", "g1006.t1"), class = "data.frame", row.names = c("g14773.t1", 
"g6302.t1", "g399.t1", "g15590.t1", "g2595.t1", "g149.t1", "g482.t1", 
"g14053.t1", "g1006.t1")) 

答えて

1

あなたは自分のレベルが両方の列で見つかった値の和集合であることを指定して、factorにあなたの列df$dataSet1df$dataSet2を変換することができます。そして、単にtableを使用します。二つの値が二度一緒に発見された場合にはなら、行列の値は2 になりますので、例えば

df$dataSet1 = factor(df$dataSet1,levels=union(df$dataSet1,df$dataSet2)) 
df$dataSet2 = factor(df$dataSet2,levels=union(df$dataSet1,df$dataSet2)) 
res = table(df) 

Tableは、数ではなく0/1値が含まれます

res[res>0] = 1 

結果:問題、あなたは追加することができます助けを

  dataSet2 
dataSet1 g14773.t1 g6302.t1 g399.t1 g15590.t1 g2595.t1 g149.t1 g482.t1 g14053.t1 g1006.t1 
    g14773.t1   0  1  0   0  0  0  0   0  0 
    g6302.t1   1  0  0   0  0  0  0   0  0 
    g399.t1   0  0  0   0  0  0  1   0  0 
    g15590.t1   0  0  0   0  0  0  0   1  0 
    g2595.t1   0  0  0   0  0  0  0   0  1 
    g149.t1   0  1  0   0  0  0  0   0  0 
    g482.t1   0  0  0   0  0  0  0   0  0 
    g14053.t1   0  0  0   0  0  0  0   0  0 
    g1006.t1   0  0  0   0  0  0  0   0  0 
+0

感謝をし、私もまったく組合をやって考えていませんでした。 – user1238097

+0

ここでは、ファクターのレベルを定義することができます。デフォルトでは、 'table'は未使用の場合でもすべてのレベルを保持します。 – Lamia

関連する問題