首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取给定深度截止点的分支下的树叶名称

获取给定深度截止点的分支下的树叶名称
EN

Stack Overflow用户
提问于 2017-01-08 18:10:31
回答 2查看 87关注 0票数 2

我想知道在dendrogram中,对于给定的深度截止点,我可以通过什么方式为低于该深度截止点的每个分支获取一个列表,其中列出了它的后代所有叶子的名称。

例如,我创建了这个dendrogram

代码语言:javascript
复制
set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))

使用dendextend绘制它

代码语言:javascript
复制
require(dendextend)
dend %>% plot

并将深度截止定义为14.5:

代码语言:javascript
复制
abline(h=14.5,col="red")

我的清单应该是:

代码语言:javascript
复制
list(c(5),c(7),c(8),c(10,4,9),c(3,6,1,2))
EN

回答 2

Stack Overflow用户

发布于 2017-01-09 05:35:20

代码语言:javascript
复制
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")

dendextend中的cutree function接受高度截止值,并将返回一个带有组成员身份的整数vector

代码语言:javascript
复制
> 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
EN

Stack Overflow用户

发布于 2017-01-08 19:37:05

不完全确定这是否是你想要的答案,但你能像这样访问它们吗?

代码语言:javascript
复制
acme$Accounting$children %>% names()
"New Software"             "New Accounting Standards"

acme$IT$children %>% names()
"Outsource"   "Go agile"    "Switch to R"

假设您希望自动执行此操作,那么它将如下所示

代码语言:javascript
复制
names = c('Accounting', 'IT')
sapply(names, function(x) acme[[x]]$children %>% names(.))

我认为可能有一种更优雅的方法来做这件事,但这看起来并不是一种可怕的方法。

编辑

因为用户完全改变了,所以这里有一个新的答案:

代码语言:javascript
复制
get_height = function(x){
  a = attributes(x)
  a$height
}

height = 14
dendrapply(dend, function(x) ifelse(get_height(x) < height, x, '')) %>% unlist()

您只需要访问树状图中每个末端节点的高度,并确定它是高于还是低于您希望的高度。不幸的是,这不会将来自同一父节点的叶节点分组在一起--然而,这应该不会太困难,只需进行一些修补即可。希望这能让你上路。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41531551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档