2015-05-09 61 views
3

在我的原始數據集上實現k均值聚類後,我得到了一個df。我在這裏有4個不同的簇,我想知道每個簇中4個變量(V1到V4)的變化程度。換句話說,這4個變量中的哪些變化會導致羣集被分離。使用R彙總簇(k-均值)中的變量變化

fit <- kmeans(df, 4, iter.max=1000, nstart=25) 
palette(alpha(brewer.pal(9,'Set1'), 0.5)) 
plot(df, col=fit$clust, pch=16) 
aggregate(df, by=list(fit$cluster), FUN=mean) 
clust.out <- fit$cluster 
df1 <- data.frame(df, fit$cluster) 

這裏是我的DF1後的k-means

+-------+-------+-------+--------+--------+-------------+ 
| ID | V1 | V2 | V3 | V4 | fit.cluster | 
+-------+-------+-------+--------+--------+-------------+ 
| DJ123 | 0.5 | 0.7 | -0.4 | -0.1 |   1 | 
| DJ123 | 0.46 | 0.68 | -0.39 | -0.09 |   1 | 
| DJ123 | 0.77 | 0.9 | -0.4 | -0.4 |   2 | 
| DJ123 | 11.23 | 11.11 | -11.21 | -11.21 |   4 | 
| DJ123 | 1.5 | 1.7 | -1.4 | -5.1 |   3 | 
| DJ123 | 0.76 | 0.9 | -0.4 | -0.4 |   2 | 
| DJ123 | 1.5 | 2.7 | -1.4 | -4.1 |   3 | 
+-------+-------+-------+--------+--------+-------------+ 

能否請您提供的樣本代碼來獲得集羣內的彙總統計?我希望我的問題很明確。

回答

3

您可以使用ddplyplyr輕鬆完成此操作。

library(plyr) 
ddply(df,.(cluster),summarise,variance1 = var(V1),variance2 = var(V2),mean1 = mean(V1),...) 

你也能做到這樣,

ddply(df,.(cluster),function(x){ 
    res = c(as.numeric(colwise(var)(x)),as.numeric(colwise(mean)(x))) 
    names(res) = paste0(rep(c('Var','Mean'),each = 4),rep(1:4,2)) 
    res 
}) 
+0

謝謝!你的第一個代碼片段運行良好。你是否錯過了第二個括號中的括號?我嘗試運行並將第一行改爲「ddply(data_Scaled,。(cluster),function()」)中的「ddply(df,。(cluster),function(x)){」,但它表示「Error:unexpected' x))「」 – Sharath

+0

是的,我忘了用圓括號關閉'ddply'函數。現在修復它。 –

+0

優秀!效果很好。除方差之外是否還有其他彙總統計數據,並且意味着我可以在羣集中獲得?我只是好奇而已。 – Sharath