Предполагая, что ваша матрица называется mat
# get all vars present in each row
present <- lapply(seq(nrow(mat)), function(i) names(which(mat[i,] == 1)))
# get all pairs
all.pairs <- gtools::combinations(n = ncol(mat), r = 2, colnames(mat))
# count times pairs appear
count <- apply(all.pairs, 1, function(x){
there <- lapply(x, function(y) sapply(present, `%in%`, x = y))
sum(Reduce(`&`, there))
})
cbind(all.pairs, count)[count > 0,]
# count
# [1,] "A1" "B2" "2"
# [2,] "A1" "B3" "3"
# [3,] "A1" "B4" "2"
# [4,] "A1" "C2" "1"
# [5,] "A1" "C4" "1"
# [6,] "A1" "D2" "1"
# [7,] "A1" "D3" "1"
# [8,] "A1" "D4" "1"
# [9,] "B1" "B2" "1"
# [10,] "B1" "C3" "1"
# [11,] "B1" "D4" "1"
# [12,] "B2" "B3" "2"
# [13,] "B2" "C3" "1"
# [14,] "B2" "C4" "1"
# [15,] "B2" "D4" "2"
# [16,] "B3" "B4" "1"
# [17,] "B3" "C2" "1"
# [18,] "B3" "C4" "1"
# [19,] "B3" "D4" "1"
# [20,] "B4" "C2" "1"
# [21,] "B4" "D2" "1"
# [22,] "B4" "D3" "1"
# [23,] "C3" "D4" "1"
# [24,] "D2" "D3" "1"
Изменить: включить обратные пары, например, и A1: B2, и B2: A1, определите all.pairs
как показано ниже
all.pairs <- expand.grid(colnames(mat), colnames(mat))