如何计算矩阵(R)中多簇的大小和位置

时间:2021-07-21 00:08:24

标签: r matrix

我有一个矩阵,我想知道由相同数值表示的每个簇的中心和最小/最大大小。

以下面矩阵中数字2表示的簇(或最小/最大列/行)的中心位置和大小为例。这个想法与在图像上执行 How to obtain size of cluster of pixels in RHow to obtain size of multi clusters in matrix (R)

但是当我使用函数 apply(matrix2, 2, mean)apply(matrix2, 2, range) 时,结果合并了两个集群。有没有办法获取每个集群?

> matrix<- read.csv("2_ind_matrix.csv")
   X1 X1.1 X1.2 X1.3 X1.4 X1.5
1   1    1    1    1    1    1
2   1    1    1    1    1    1
3   1    1    1    1    1    1
4   1    1    1    2    2    2
5   1    1    1    1    2    2
6   1    1    1    1    1    1
7   1    1    1    1    1    1
8   1    1    1    1    1    1
9   1    1    1    1    1    1
10  1    1    1    1    1    1
11  2    1    1    1    1    1
12  2    1    1    1    1    1
13  2    1    1    1    1    1
14  2    2    1    1    1    1
15  2    2    2    1    1    1
16  2    2    2    2    2    2
17  2    2    2    2    2    2

> matrix2<- which(matrix == 2, TRUE)
> apply(matrix2, 2, range) #Range
     row col
[1,]   4   1
[2,]  17   6
> apply(matrix2, 2, mean) #Center
  row   col 
13.16  3.20 

1 个答案:

答案 0 :(得分:1)

需要决定有多少集群。这里我假设有 2 个集群。 kmeans 可以使用从 which 返回的位置找到这些位置。

y <- which(x==2, TRUE)
y <- cbind(y, cluster=kmeans(y, 2)$cluster)

aggregate(y[,1:2], list(y[,3]), range)
#  Group.1 row.1 row.2 col.1 col.2
#1       1     4     5     4     6
#2       2    11    17     1     6

aggregate(y[,1:2], list(y[,3]), mean)
#  Group.1   row col
#1       1  4.40 5.2
#2       2 15.35 2.7
相关问题