我想要么:
我知道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“只包含添加的子树和姐妹子树,而不是树的其余部分。
问题:
谢谢。
发布于 2014-08-11 08:50:28
您可以在prune包中使用dendextend函数,它正是为这类事情而设计的。(看看?prune)。修剪完后,您可以使用merge函数。
如果您需要替换树的特定子部分中的树,我相信目前使用通用函数是不可能的。您可以使用nestes [[ ]]手动添加子树,但请注意,您将获得的属性将不再正确(特别是成员数,可能还包括高度)。因此,您需要更认真地考虑这个问题,以便解决这个问题(如果您要解决这个问题,请您提交一个下载补丁,或者给我发电子邮件: tal.galili@gmail.com)。
https://stackoverflow.com/questions/11719847
复制相似问题