R根据data.frame中的列创建邻接矩阵

时间:2014-11-24 23:15:17

标签: r reshape2 adjacency-matrix

我有10个视频的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,因为r1r6r7具有相同的标记。最后,我想要一个如下输出矩阵:

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

我如何汇总数据?

1 个答案:

答案 0 :(得分:8)

矩阵乘法应该在这里工作

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]))