我想要:
我知道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”只有添加的子树和姐妹子树,而不是树的其余部分。
问题:
感谢。
答案 0 :(得分:0)
您可以使用dendextend
包中的prune
函数,该函数专为此类设计而设计。 (看?prune
)。修剪后,您可以使用merge
功能。
如果您需要替换树的特定子部分中的树,我相信目前使用通用功能不可能。您可以使用nestes [[ ]]
手动添加子树,但请注意,您将获得的属性将不再正确(尤其是成员数,也可能是高度)。所以你需要更认真地考虑这个问题,以便一般地解决这个问题(如果你要解决它,感觉被邀请提交一个补丁到dendextend,或者只是给我发电子邮件:tal.galili@gmail.com)< / p>