我有一個類似於下面的但更大的矩陣。使用R中的apply將矩陣轉換爲配對列表?
vec <- c(0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0)
M <- matrix(vec, nrow = 4, byrow = TRUE)
colnames(M) <- rownames(M) <- LETTERS[1:4]
A, B, C, D
A, 0, 1, 1, 0
B, 0, 0, 1, 1
C, 1, 0, 0, 0
D, 0, 1, 1, 0
最終,我想一個矩陣或其中,每個連續的呼叫具有值時間,我結束了一個rowname,列名對一個data.frame。因此,鑑於上述矩陣,我結束了與下面的矩陣或數據幀:
A,B
A,C
B,C
B,D
C,A
D,B
D,C
我可以循環和與expand.grid做到這一點,但是這看起來像是我應該能夠用做應用功能。例如,我可以得到一部分的方式有這樣的:
tmp <- apply(M, 1, function(x) colnames(M)[which(x > 0)])
這給了我
$A
[1] "B" "C"
$B
[1] "C" "D"
$C
[1] "A"
$D
[1] "B" "C"
如果是容易的,那麼我可以還包括在細胞數(細胞超過0)作爲第三欄?