我正在使用kmeans()根据分数创建群组。目标是分配星级,以便得分最高的个人获得四颗星,得分最低的个人获得1星。我想基于kmeans()$ cluster值创建星形变量。但是,就目前而言,kmeans()$ cluster对集群进行索引,但索引与集团的相对位置不对应。
有没有办法手动分配集群索引,或者设置要按特定顺序分配的索引?我希望低分组有kmeans()$ cluster = 1,kmeans()$ cluster = 2为第二低等等。
id <- 1:500
set.seed(12); score <- runif(500, 0, 1)
dat <- data.frame(id, score)
km = kmeans(dat$score, 4, nstart=10)
plot(dat$score,
col = c(km$cluster),
main="K-Means result with 4 clusters",
pch=20,
cex=0.8)
dat$star <- km$cluster
plot(dat$score,
dat$star,
main="Score v. cluster number")
答案 0 :(得分:0)
是。您可以使用您想要的值的小表,并使用原始群集号来查找它们。这是一个例子。
set.seed(2017)
KM3 = kmeans(iris[,1:4], 3)
KM3$cluster
[1] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[39] 2 2 2 2 2 2 2 2 2 2 2 2 3 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[77] 3 1 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 1 3 1 1 1 1 3 1 1 1 1 1 1 3
[115] 3 1 1 1 1 3 1 3 1 3 1 1 3 3 1 1 1 1 1 3 1 1 1 1 3 1 1 1 3 1 1 1 3 1 1 3
群集处于尴尬的顺序。我希望低编号点在集群1中,集群2中间和集群3中的高编号点。所以我想将所有1改为3,将2改为1,将3改为2。 p>
Relabel = c(3,1,2)
KM3$cluster = Relabel[KM3$cluster]
KM3$cluster
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[39] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[77] 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 3 3 3 3 2 3 3 3 3 3 3 2
[115] 2 3 3 3 3 2 3 2 3 2 3 3 2 2 3 3 3 3 3 2 3 3 3 3 2 3 3 3 2 3 3 3 2 3 3 2
只是一点额外的细节。它说Relabel = c(3,1,2)
因为我希望1成为3,所以第一个位置有3个。我希望2成为1,所以第二个位置有1.我希望3成为2所以第三个位置有一个2.
答案 1 :(得分:0)
其中任何一个都会产生一个新的聚类分配向量,这样1指的是中心最小的聚类,下一个是2,依此类推。第一个仅以fitted(km)
表示,而第二个以km$centers
和km$cluster
表示,最后一个以fitted(km)
和{{1}表示}
km$center