我有一个由 1 和 0 组成的矩阵。我想做的是将具有 1 的单元格分组并计算矩阵中存在的簇的数量以及这些簇的大小。
如果 n 个 1(在本例中至少有 4 个值为 1 的单元格彼此靠近)彼此靠近(彼此紧邻上、下、左或右,则将它们视为单个簇并输出簇的数量及其大小。
例如,矩阵如下所示:
> m
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 0 0 0 0 0 0 0 0
[2,] 1 1 1 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0
[4,] 0 0 1 0 0 0 0 0 0 0
[5,] 0 0 1 0 0 0 0 1 1 0
[6,] 0 0 0 0 0 0 0 0 1 1
该矩阵的簇数为 2 个簇。一组由 7 个 1 组成,另一组由 4 个 1 组成。我在尝试让它发挥作用时遇到了相当大的麻烦,而且似乎无法弄清楚。
输出可以像这样简单:
> output
cluster size
1 7
2 4
最佳答案
您可以使用包 SDMTools 中的函数 ConnCompLabel
标记二元矩阵中的连通分量:
R> ConnCompLabel(m)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 0 0 0 0 0 0 0 0
[2,] 1 1 1 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0
[4,] 0 0 1 0 0 0 0 0 0 0
[5,] 0 0 1 0 0 0 0 2 2 0
[6,] 0 0 0 0 0 0 0 0 2 2
R> tab <- table(ConnCompLabel(m))[-1]
R> tab[tab >= 4]
1 2
7 4
关于r - 从最小尺寸的矩阵值生成数值簇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738648/