从最小尺寸的矩阵值生成数值集群

时间:2014-09-09 07:11:09

标签: r matrix

我有一个1和0的矩阵。我想要做的是将具有1的单元格分组成簇,并计算矩阵中存在的簇的数量以及这些簇的大小。

如果n的数字(在这种情况下至少4个单元格彼此接近的4个单元格)彼此靠近(彼此立即向上,向下,向左或向右),则将它们视为单个集群并输出集群数量及其规模。

例如矩阵看起来像这样:

> 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

1 个答案:

答案 0 :(得分:3)

您可以使用包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