2016-09-24 16 views
0

我有一個配方成分RXI矩陣,看起來像這樣:鄰接矩陣R中的兩種不同情況

 I 
R a b c d e 
1 1 0 1 0 0 
2 1 1 1 0 1 
3 0 1 1 1 0 
4 0 0 0 1 1 

現在,我想計算RXR鄰接矩陣。關於如何計算鄰接矩陣的元素,我有幾個選擇。 期權: a。 b。矩陣中的元素是一個,如果它共享任何成分 b。矩陣中的元素是共享成分的數量。

例如,

的情況下:

R 
R 1 2 3 4 
1 1 1 1 0 
2 1 1 1 1 
3 1 1 1 1 
4 0 1 1 1 

情形B:

R 
R 1 2 3 4 
1 2 2 1 0 
2 2 4 2 1 
3 1 2 3 1 
4 0 1 1 2 
+1

參見'tcrossprod' - 'tcrossprod(墊)' 。爲了得到你的「a」結果,可以使用'tcrossprod(mat)> 0'。另請參閱[本文](http://stackoverflow.com/questions/19891278/r-table-of-interactions-case-with-pets-and-houses)。 –

回答

1

您可以使用tcrossprod()mat %*% t(mat)

tcrossprod(mat) 
#  [,1] [,2] [,3] [,4] 
#[1,] 2 2 1 0 
#[2,] 2 4 2 1 
#[3,] 1 2 3 1 
#[4,] 0 1 1 2 

和F或殼體a,它是區分b的一種特殊情況下,可以用1替換非零元素:

tm <- tcrossprod(mat) 
tm[tm != 0] = 1 
tm 
#  [,1] [,2] [,3] [,4] 
#[1,] 1 1 1 0 
#[2,] 1 1 1 1 
#[3,] 1 1 1 1 
#[4,] 0 1 1 1 

數據

dput(mat) 
structure(c(1L, 1L, 0L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 1L, 1L, 0L, 1L, 0L, 1L), .Dim = 4:5, .Dimnames = list(NULL, 
    c("a", "b", "c", "d", "e")))