R создать матрицу смежности в соответствии со столбцами из data.frame

У меня есть data.frame для 10 видео, и каждый столбец представляет собой тег, указывающий категорию видео. Например, данные будут выглядеть так:

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, r6 и r7 имеют одинаковые теги. Наконец, мне нужна выходная матрица, подобная следующей:

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

Как я могу агрегировать данные?


person Boxuan    schedule 24.11.2014    source источник


Ответы (1)


Умножение матриц здесь должно работать

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]))
person user20650    schedule 24.11.2014
comment
Или, точнее, crossprod(as.matrix(dat[-1])). - person A5C1D2H2I1M1N2O1R2T1; 25.11.2014