2016-11-11 204 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解決方案幫腔,因爲這是一種選擇,以及。