我想知道dendrogram
给定深度中断的方式,我可以在深度截止点以下的每个分支获得所有叶子的名称列表。它的后代。
例如,我创建了这个dendrogram
:
set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))
使用dendextend
绘图:
require(dendextend)
dend %>% plot
将深度截止值定义为14.5:
abline(h=14.5,col="red")
我的清单应该是:
list(c(5),c(7),c(8),c(10,4,9),c(3,6,1,2))
答案 0 :(得分:1)
set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))
require(dendextend)
dend %>% plot
abline(h=14.5,col="red")
cutree
中的function
dendextend
接受高度截止值,并返回具有群组成员资格的整数vector
:
> cutree(dend,h=14.5)
1 2 3 4 5 6 7 8 9 10
1 1 1 2 3 1 4 5 2 2
答案 1 :(得分:0)
不完全确定这是否是您所追求的答案,但您可以像这样访问它们吗?
acme$Accounting$children %>% names()
"New Software" "New Accounting Standards"
acme$IT$children %>% names()
"Outsource" "Go agile" "Switch to R"
大概你想自动这样做,所以它就像
names = c('Accounting', 'IT')
sapply(names, function(x) acme[[x]]$children %>% names(.))
我认为可能有一种更优雅的方式来做到这一点,但这看起来并不是一种可怕的方式。
修改强>
由于用户完全改变了问题,这里是一个新答案:
get_height = function(x){
a = attributes(x)
a$height
}
height = 14
dendrapply(dend, function(x) ifelse(get_height(x) < height, x, '')) %>% unlist()
您只需要访问树形图中每个终端节点的高度,并确定它是否高于或低于您想要的高度。不幸的是,这不会将来自同一父节点的叶节点组合在一起 - 但是,这不应该太难以添加一些修补。希望这能让你顺利上路。