我有一个数值为0或1的矩阵,我想获得一组相邻1的列表。定义相连的组时,每个1的水平和垂直相邻都将被考虑。
例如,矩阵如下:
mat = rbind(c(1,0,0,0,0),
c(1,0,0,1,0),
c(0,0,1,0,0),
c(0,0,0,0,0),
c(1,1,1,1,1))
> mat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 1 0 0 1 0
[3,] 0 0 1 0 0
[4,] 0 0 0 0 0
[5,] 1 1 1 1 1
应返回以下4个连通分量:
C1 = {(1,1);(2,1)}
C2 = {(2,4)}
C3 = {(3,3)}
C4 = {(5,1);(5,2);(5,3);(5,4);(5,5)}
有人知道如何在R中快速完成吗?我实际的矩阵确实非常大,例如2000x2000(但我希望连通分量的数量是相对较小的,即200个)。
for (i in 1:max(Clumps, na.rm=TRUE))
可以简化为for (i in 1:tot)
,是吗? - Darren Tsai