2014-11-24 65 views
4

对于10个视频,我有data.frame,每列都是一个表示视频类别的标记。例如,数据将显示如下:R根据data.frame中的列创建邻接矩阵

data <- data.frame(id=paste0("r", 1:10), A=sample(0:1,10,TRUE), B=sample(0:1,10,TRUE), C=sample(0:1,10,TRUE)) 
data 
    id A B C 
1 r1 1 0 1 
2 r2 0 0 0 
3 r3 0 1 0 
4 r4 1 1 0 
5 r5 0 0 0 
6 r6 1 0 1 
7 r7 1 0 1 
8 r8 0 1 1 
9 r9 0 0 1 
10 r10 1 0 0 

现在我想以基于标签的一个邻接矩阵,和值应具有相同标签的视频数量。例如,单元格A-C应为3,因为r1,r6r7具有相同的标记。最后,我想要一个输出矩阵,如下所示:

 A B C 
A 5 1 3 
B 1 3 1 
C 3 1 5 

我该如何汇总数据?

回答

6

矩阵乘法应该在这里

set.seed(1) 
dat <- data.frame(id=paste0("r", 1:10), A=sample(0:1,10,TRUE), B=sample(0:1,10,TRUE), C=sample(0:1,10,TRUE)) 

mat <- as.matrix(dat[-1]) 

t(mat) %*% mat 

编辑

或者在一个班轮(感谢@AnandaMahto)

crossprod(as.matrix(dat[-1])) 
+4

或者,更直接,'crossprod(如工作。矩阵(DAT [-1]))'。 – A5C1D2H2I1M1N2O1R2T1 2014-11-25 03:25:36