希望标题的措辞不是太糟糕。我有一棵树,我使用cutree从中获取组,但很明显这些组没有从左到右或从右到左编号(我知道分支内的方向并不重要,是希望分组与hclust对象中的排序相同)。是否有可能从树中提取组(使用cutree的高度选项)并知道哪些组彼此更相关?我在下面使用USArrests来举例说明。
hc <- hclust(dist(USArrests), "ave")
plot(hc)
cutree(hc,h=60)
Alabama Alaska Arizona Arkansas California
1 1 1 2 1
Colorado Connecticut Delaware Florida Georgia
2 3 1 4 2
Hawaii Idaho Illinois Indiana Iowa
3 3 1 3 3
Kansas Kentucky Louisiana Maine Maryland
3 3 1 3 1
Massachusetts Michigan Minnesota Mississippi Missouri
2 1 3 1 2
Montana Nebraska Nevada New Hampshire New Jersey
3 3 1 3 2
New Mexico New York North Carolina North Dakota Ohio
1 1 4 3 3
Oklahoma Oregon Pennsylvania Rhode Island South Carolina
2 2 3 2 1
South Dakota Tennessee Texas Utah Vermont
3 2 2 3 3
Virginia Washington West Virginia Wisconsin Wyoming
2 2 3 3 2
如果你绘制树,很明显第1组和第4组更相关,那么第2组和第3组更相关。但是,当我打印每组的内容时,无法知道这种关系是什么。我缺少一个功能或标准流程吗?我正在使用的真实数据我将36k值拆分为10组,因此像我对示例数据一样在视觉上验证关系是很困难的,并且希望将其编码为未来分析的脚本。提前谢谢。
答案 0 :(得分:3)
我想你想用
hc <- hclust(dist(USArrests), "ave")
cuthc <- cut(as.dendrogram(hc), h=60)
这将返回一个列表,其中$upper
显示剪切上方的树,以及$lower
元素,该元素是剪切制作的每个子树的列表。我们可以用
layout(matrix(1:4, ncol=2))
sapply(1:4, function(i) plot(cuthc$lower[[i]]))
然后,如果你想按照它们在树形图中出现的顺序提取名称和组,你可以这样做
stack(setNames(Map(labels, cuthc$lower),seq_along(cuthc$lower)))
我只使用stack()
和setNames()
为$lower
列表中的每个元素分配唯一ID。当列表未命名时,stack()
不喜欢它