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"))
感謝をし、私もまったく組合をやって考えていませんでした。 – user1238097
ここでは、ファクターのレベルを定義することができます。デフォルトでは、 'table'は未使用の場合でもすべてのレベルを保持します。 – Lamia