Как упомянуто @Sotos в комментариях, вы можете использовать пакет igraph
для визуализации матрицы, а код ниже просто, чтобы дать вам некоторое представление о том, как сделать ее
library(igraph)
M <- crossprod(m)
g <- graph_from_adjacency_matrix(M,mode = "undirected")
plot(g)
, и вы Посмотрите, как вершины связаны. ![enter image description here](https://i.stack.imgur.com/qneOj.png)
Тогда ожидаемый результат (кроме последней строки, поскольку я понятия не имею, как вы его получили) может быть достигнут следующим образом:
r <- clusters(g)
vtx <- names(r$membership)
len <- ave(seq(r$membership),r$membership,FUN = length)
cnm <- ave(vtx,r$membership,FUN = function(x) paste0(x,collapse = ","))
dfout <- setNames(as.data.frame(rbind(len,cnm)),vtx)
такой, что
> dfout
a b c d e
len 3 3 2 3 2
cnm a,b,d a,b,d c,e a,b,d c,e
ПРИМЕЧАНИЕ
Я думаю, что ваш вопрос может быть для кластеризации (не соседние), поэтому вы можете использовать команды, как показано ниже:
> cluster_infomap(g)
IGRAPH clustering infomap, groups: 2, mod: 0.38
+ groups:
$`1`
[1] "a" "b" "d"
$`2`
[1] "c" "e"
или
> clusters(g)
$membership
a b c d e
1 1 2 1 2
$csize
[1] 3 2
$no
[1] 2
ДАННЫЕ
m <- structure(c(1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 1L, 0L, 0L,
1L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 0L,
0L), .Dim = 6:5, .Dimnames = list(c("1", "2", "3", "4", "5",
"6"), c("a", "b", "c", "d", "e")))