2016-11-11 195 views
0

我在R中使用简单kmeans聚类单个向量。由于簇号相当随意分配(我假设),因此我需要按顺序获取它们(使用簇中心)。根据聚类中心更改R中kmeans产生的聚类数

这里是一个〔实施例:

> vals <- c(0.22, 0.17, 0.21, 0.13, 0.00) 
> set.seed(32833) 
> cl <- kmeans(vals ,3) 

> cl$cluster 
[1] 2 3 2 3 1 

> cl$centers 
    [,1] 
1 0.000 
2 0.215 
3 0.150 

你可以从聚类中心看到,集群由杂波中心(升序)的顺序依次为:1,3,2。

我想返回相应转换的已识别簇的向量:

例如,转换(CL $群集)应该给我3 2 3 2 1.

我已经尝试通过排序chaning因子水平,但无法使其达到逻辑结束。

> cl$cluster <- as.factor(as.character(cl$cluster)) 
> levels(cl$cluster) <- order(-cl$centers) 
> cl$cluster 
[1] 3 1 3 1 2 
Levels: 2 3 1 

回答

0

您可以按照中心向量的顺序为集群向量编制索引。在你的榜样,

vals <- c(0.22, 0.17, 0.21, 0.13, 0.00) 
set.seed(32833) 
cl <- kmeans(vals ,3) 

cl$cluster 
[1] 2 3 2 3 1 

cl$centers 
    [,1] 
1 0.000 
2 0.215 
3 0.150 

order(cl$centers)[cl$cluster] 
[1] 3 2 3 2 1 

别人可以用as.factor解决方案帮腔,因为这是一种选择,以及。