2015-05-09 58 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