R-如何获得cutree组之间的关系?

时间:2014-07-02 00:14:05

标签: r hierarchy

希望标题的措辞不是太糟糕。我有一棵树,我使用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组,因此像我对示例数据一样在视觉上验证关系是很困难的,并且希望将其编码为未来分析的脚本。提前谢谢。

1 个答案:

答案 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]]))

enter image description here

然后,如果你想按照它们在树形图中出现的顺序提取名称和组,你可以这样做

stack(setNames(Map(labels, cuthc$lower),seq_along(cuthc$lower)))

我只使用stack()setNames()$lower列表中的每个元素分配唯一ID。当列表未命名时,stack()不喜欢它