У меня есть данные в виде:
df <- data.frame(group = c(rep(1,5),rep(2,5),rep(3,5),rep(4,5),rep(5,5)),
thing = c(rep(c('a','b','c','d','e'),5)),
score = c(1,1,0,0,1,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,1,0,1,0))
, который сообщает "оценку" для каждой "вещи" для группы "групп".
Я хотел бы создатьматрица корреляции, которая показывает корреляции попарных баллов для всех «вещей» на основе корреляции в их баллах по группам:
thing_a thing_b thing_c thing_d thing_e
thing_a 1 . . . .
thing_b corr 1 . . .
thing_c corr corr 1 . .
thing_d corr corr corr 1 .
thing_e corr corr corr corr 1
Например, данные, лежащие в основе корреляции между вещью «а» и вещью »b "было бы:
group thing_a_score thing_b_score
1 1 1
2 1 1
3 1 1
4 0 1
5 0 1
На самом деле число уникальных групп составляет ~ 1000, а количество вещей ~ 10000, поэтому мне нужен подход, который более эффективен, чем грубая сила для цикла.
Мне не нужно, чтобы результирующая матрица корреляций находилась в одной матрице или даже в самой матрице (т. Е. Это могла быть группа наборов данных с тремя столбцами "thing_1 thing_2 corr
").