【问题标题】:merging two dendrograms at a specific node在特定节点合并两个树状图
【发布时间】:2012-07-28 00:33:48
【问题描述】:

我愿意:

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

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

我知道cut() 将树状图切割到特定高度或特定数量的节点。但是如何让它只删除一个特定的子树呢?

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


这是如何制作树状图的示例代码。

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)

- 注意:我发现了如何通过以下方式替换子树。

 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”只有添加的子树和姊妹子树,没有树的其余部分。

问题:

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

谢谢。

【问题讨论】:

    标签: r dendrogram dendextend


    【解决方案1】:

    您可以使用 dendextend 包中的 prune 函数,该函数专为此类事情而设计。 (看?prune)。修剪后,您可以使用merge 函数。

    如果您需要替换树的特定子部分中的树,我相信目前使用通用功能是不可能的。您可以使用嵌套[[ ]] 手动添加子树,但请注意您将获得的属性将不再正确(尤其是成员数,可能还有高度)。因此,您需要更认真地考虑这一点才能普遍解决此问题(如果您能够解决它,请提交一个补丁来dendextend,或者只是通过电子邮件发送给我:tal.galili@gmail.com)

    【讨论】:

      猜你喜欢
      • 2020-01-18
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多