使用plot(hclust(dist(x)))
方法,我能够绘制一个聚类树图。有用。然而,我想获得所有集群的列表,而不是树图,因为我有大量的数据(如150K节点),情节变得混乱。
换句话说,假设a b c
是一个群集,如果d e f g
是一个群集,那么我想得到这样的内容:
1 a,b,c
2 d,e,f,g
请注意,这不是我想要的“输出”。这只是一个例子。我只想获得一个簇的列表,而不是一个树图。它可以是矢量,矩阵或只是简单的数字,显示哪些组元素属于。
这怎么可能?
答案 0 :(得分:41)
我将使用R中可用的数据集来演示如何将树剪切成所需数量的片段。结果是一张表。
构建一个hclust对象。
hc <- hclust(dist(USArrests), "ave")
#plot(hc)
现在,您可以根据需要将树剪切成多个分支。对于我的下一个技巧,我将把树分成两组。您可以使用k
参数设置剪切数。请参阅?cutree
以及使用可能对您更有用的参数h
(请参阅cutree(hc, k = 2) == cutree(hc, h = 110)
)。
cutree(hc, k = 2)
Alabama Alaska Arizona Arkansas California
1 1 1 2 1
Colorado Connecticut Delaware Florida Georgia
2 2 1 1 2
Hawaii Idaho Illinois Indiana Iowa
2 2 1 2 2
Kansas Kentucky Louisiana Maine Maryland
2 2 1 2 1
Massachusetts Michigan Minnesota Mississippi Missouri
2 1 2 1 2
Montana Nebraska Nevada New Hampshire New Jersey
2 2 1 2 2
New Mexico New York North Carolina North Dakota Ohio
1 1 1 2 2
Oklahoma Oregon Pennsylvania Rhode Island South Carolina
2 2 2 2 1
South Dakota Tennessee Texas Utah Vermont
2 2 2 2 2
Virginia Washington West Virginia Wisconsin Wyoming
2 2 2 2 2
答案 1 :(得分:15)
让我们说,
y<-dist(x)
clust<-hclust(y)
groups<-cutree(clust, k=3)
x<-cbind(x,groups)
现在您将获得每个记录,即群集组。 您也可以对数据集进行子集化:
x1<- subset(x, groups==1)
x2<- subset(x, groups==2)
x3<- subset(x, groups==3)