Я искал в интернете подобное решение, но не смог найти конкретное для моего случая.Допустим, у вас есть следующий фрейм данных:
a = c(1, 1, 1, 2, 2)
b = c(2, 1, 1, 1, 2)
c = c(2, 2, 1, 1, 1)
d = c(1, 2, 2, 1, 1)
df <- data.frame(a = a, b = b, c = c, d = d)
и df
выглядит следующим образом:
a b c d
1 1 2 2 1
2 1 1 2 2
3 1 1 1 2
4 2 1 1 1
5 2 2 1 1
Примечание: В этом примере я использую [1,2]
пара значений, но это может быть набор различных значений: [-1,1]
или даже более двух возможных значений: [-1,1,2]
.
Теперь я хотел бы иметь матрицу, в которой каждый элемент [i,j]
будет представлять количество строк со значением 1
для столбца i
и j
.Для этого конкретного случая мы имеем (показывая верхнюю диагональ, потому что она симметрична):
a b c d
a 3 2 1 1
b 3 2 1
c 3 2
d 3
Диагональ должна подсчитывать количество строк со значением 1
в данном столбце.В этом случае все столбцы имеют одинаковый номер значения 1
.Формат должен быть похож на функцию cor()
(Матрица корреляции).
Я пытался использовать table()
(а также crosstab
из пакета descr
), но он показывает информацию в виде пар столбцов,
Это можно сделать, вручную вычислив вхождение 1
каждой пары столбцов (то есть: nrow(df[df$a==1 & df$b==1,])=2
) и затем поместив в матрицу, но мне было интересно, есть ли встроенная функциячто упростит процесс.