2014-11-24 4 views
4

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

 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 

EDIT

Или в однострочника (спасибо @AnandaMahto)

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

Или, более непосредственно, 'crossprod (как. матрица (DAT [-1])) '. – A5C1D2H2I1M1N2O1R2T1

Смежные вопросы