Extract the hierarchical structure of the nodes in a dendrogram or cluster

强颜欢笑 提交于 2019-12-06 06:00:44

问题


I would like to extract the hierarchical structure of the nodes of a dendrogram or cluster.

For example in the next example:

library(dendextend)
dend15 <- c(1:5) %>% dist %>% hclust(method = "average") %>% as.dendrogram
dend15 %>% plot

The nodes are classified according their position in the dendrogram (see figure below)

(Figure extracted from the dendextend package's tutorial)

I would like to get all the nodes for each final leaf as the next output: (the labels are ordered from left to right and from bottom to top)

        hierarchical structure
leaf_1: 3-2-1
leaf_2: 4-2-1
leaf_3: 6-5-1
leaf_4: 8-7-5-1
leaf_5: 9-7-5-1

Thanks in advance,


回答1:


First I find all subtrees (i.e structure) that uses a node. In your example, there would be 9 nodes.

subtrees <- partition_leaves(dend15)
leaves <- subtrees[[1]]   # assume top node is used by all subtrees

I make a helper function to find route for each leaf, and apply it to all leaves.

pathRoutes <- function(leaf) {
  which(sapply(subtrees, function(x) leaf %in% x))
}

paths <- lapply(leaves, pathRoutes)

The raw output in list form, where each list element is the structure for an end node / leaf

> paths
[[1]]
[1] 1 2 3

[[2]]
[1] 1 2 4

[[3]]
[1] 1 5 6

[[4]]
[1] 1 5 7 8

[[5]]
[1] 1 5 7 9


来源:https://stackoverflow.com/questions/34446705/extract-the-hierarchical-structure-of-the-nodes-in-a-dendrogram-or-cluster

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!