2017-01-08 5 views
2

dendrogramの深度カットオフにはどのような方法があるのでしょうか?私は、その深さカットオフ以下の各ブランチに対して、すべての葉の名前のリストを得ることができます。その子孫。例えば特定の深度カットオフのブランチの下に葉名を取得

私はこのdendrogram作成:

dendextendを使用して、それをプロット
set.seed(1) 
mat <- matrix(rnorm(100*10),nrow=100,ncol=10) 
dend <- as.dendrogram(hclust(dist(t(mat)))) 

require(dendextend) 
dend %>% plot 

14.5と深さカットオフを定義する:

abline(h=14.5,col="red") 

enter image description here

私のリストは以下のようになります。

list(c(5),c(7),c(8),c(10,4,9),c(3,6,1,2)) 

答えて

0

これはあなたが後にしている答えは、しかし、あなたはちょうどこのようにそれらにアクセスできるかどうか全くわかりませんか?

acme$Accounting$children %>% names() 
"New Software"    "New Accounting Standards" 

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

は、おそらくあなたはとてもそれは

names = c('Accounting', 'IT') 
sapply(names, function(x) acme[[x]]$children %>% names(.)) 

のようなものだと思うこれを行うために、よりエレガントな方法は、おそらくありますでしょう自動的にこれをしたいが、これはひどいように見えませんそれを行う方法。

EDIT

ユーザーは完全にここで質問を変更したので、ここで新しい答えです:

get_height = function(x){ 
    a = attributes(x) 
    a$height 
} 

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

あなただけの系統樹内の各端末ノードの高さにアクセスし、それかどうかを判断する必要がありますあなたが望む高さの上または下です。残念ながら、これは同じ親から来る葉ノードをグループ化しません - しかし、これはちょっと変わって追加するのが難しくありません。うまくいけば、これはあなたの方法であなたを取得します。 dendextend

+0

だけ注意:%>%の機能を使用するためにmagrittrパッケージを必要とし、コードには重要ではありません。単に見栄えを良くするだけです。 – SamPassmore

+0

私は質問を明確にするように洗った – dan

+0

オクラホマ - この質問はより明確ですが全く新しい質問です。 data.treeパッケージを使って構造体のようなタクソノミについて質問する前に。今あなたはstatsパッケージを使って樹状図について尋ねています。あなたは何を達成しようとしていますか? – SamPassmore

1
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") 

cutreefunctionの高さのカットオフ値を受け入れ、グループのメンバーシップで整数vectorを返します。

> 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 
関連する問題