首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在特定节点合并两个树状图

在特定节点合并两个树状图
EN

Stack Overflow用户
提问于 2012-07-30 10:41:17
回答 1查看 1.1K关注 0票数 2

我想要么:

  1. 移除一个子树,然后将一个新的子树合并到原来的树状图中,使其与已删除的树处于相同的位置。
  2. 或者用另一个子树替换子树。

我知道merge()可以在顶部合并两个树状图。它是否也在指定的节点合并它。如果是的话,怎么做?如果没有,还有其他方法可以做到这一点吗?

我知道,cut()在一定高度或将树状图切割成特定数目的节点。但是如何使它只移除特定的子树呢?

子树的规范将是子树中第一个节点的属性。例如attr(n,"attribute")== something,这可以通过dendrapply()来完成。

这是一个如何生成树状图的示例代码。

代码语言:javascript
复制
library("stats")
library("fastcluster")

x=matrix(c(1:20),ncol=4)
y=matrix(c(21:40),ncol=4)

#creating hclusters
xcl=hclust.vector(x)
ycl=hclust.vector(y)

#converting to dendrograms
xdend=as.dendrogram(xcl)
ydend=as.dendrogram(ycl)

# merging two dendrograms at the top
zdend=merge(xdend,ydend)
  • 注意:我发现了如何用以下方法替换子树。

代码语言:javascript
复制
 merging <- function(n,subtree){
    if (attr(n,"members")==2){
    treeMerged2<<- merge(n,subtree)}}


     D=rbind(
    + c(1,1,1,1,1),
    + c(1,2,1,1,1),
    + c(2,2,2,2,2),
    + c(2,2,2,2,1),
    + c(3,3,3,3,3),
    + c(3,3,3,3,2))

Ddend=as.dendrogram(hclust.vector(D))

    tr=dendrapply(Ddend,merging, xdend)

问题:

( 1)用它的姊妹子树代替所需的子树。

2)原始树不发生变化。

3)创建的新树"treeMerged2“只包含添加的子树和姐妹子树,而不是树的其余部分。

问题:

  • 如何使输出成为包含新子树的原始树?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-08-11 08:50:28

您可以在prune包中使用dendextend函数,它正是为这类事情而设计的。(看看?prune)。修剪完后,您可以使用merge函数。

如果您需要替换树的特定子部分中的树,我相信目前使用通用函数是不可能的。您可以使用nestes [[ ]]手动添加子树,但请注意,您将获得的属性将不再正确(特别是成员数,可能还包括高度)。因此,您需要更认真地考虑这个问题,以便解决这个问题(如果您要解决这个问题,请您提交一个下载补丁,或者给我发电子邮件: tal.galili@gmail.com)。

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

https://stackoverflow.com/questions/11719847

复制
相关文章

相似问题

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