确定R中的集群成员资格

时间:2015-10-25 04:30:29

标签: r cluster-analysis k-means

这是我在kmeans之前的载体 -

> sort(table(mydata))
mydata
23  7  9  4 10  3  5  8  2  1 
 1  3  3  4  5  6  6  6  7  9

km <- kmeans(mydata, centers = 10) 

在kmeans之后 -

> sort(table(km$cluster))
km$cluster
 1  6  7  3  5  2  4 10  8  9 
 1  3  3  4  5  6  6  6  7  9 

显然,我的所有1都存储在群集9中,所有2都存储在群集8中,依此类推。

我能找到使用R特定号码所属的群集吗?说,找到我的1s所在的群集?

2 个答案:

答案 0 :(得分:5)

$cluster的值将以与原始数据相同的顺序返回。

mydata <- rep(c(23,7,9,4,10,3,5,8,2,1), c(1,3,3,4,5,6,6,6,7,9))
sort(table(mydata))
# mydata
# 23  7  9  4 10  3  5  8  2  1 
#  1  3  3  4  5  6  6  6  7  9 

km <- kmeans(mydata, centers = 10) 
unique(cbind(value=mydata, clust=km$cluster))
#       value clust
#  [1,]    23     9
#  [2,]     7     5
#  [3,]     9     7
#  [4,]     4     4
#  [5,]    10     1
#  [6,]     3    10
#  [7,]     5     2
#  [8,]     8     8
#  [9,]     2     6
# [10,]     1     3

我刚刚用cbind重新加入了这两个,并使用unique消除了所有重复项,因为你有这样的离散数据。

答案 1 :(得分:1)

扩展MrFlick的答案(建议),并且如果您以编程方式想要集群号,也可以这样做(利用magrittr包,以摆脱所有这些嵌套的括号):

library(magrittr)
data.point <- 5  # put the data point here
cluster.no <- c(mydata==data.point)  %>% which %>% km$cluster[.] %>% unique

示例:

library(magrittr)
set.seed(42)  # for reproducibility
mydata <- rep(c(23,7,9,4,10,3,5,8,2,1), c(1,3,3,4,5,6,6,6,7,9))
km <- kmeans(mydata, centers = 10) 

data.point <- 23
c(mydata==data.point)  %>% which %>% km$cluster[.] %>% unique
# 8
data.point <- 10
c(mydata==data.point)  %>% which %>% km$cluster[.] %>% unique
# 1