我有一个矩阵,我想知道由相同数值表示的每个簇的中心和最小/最大大小。
以下面矩阵中数字2表示的簇(或最小/最大列/行)的中心位置和大小为例。这个想法与在图像上执行 How to obtain size of cluster of pixels in R 和 How 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
答案 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