2

dendrogram特定の深さのカットオフに対して、その深さのカットオフより下の枝ごとに、その子孫であるすべての葉の名前のリストを取得する方法は何だろうと思っています。

たとえば、私はこれを作成しますdendrogram:

set.seed(1)
mat <- matrix(rnorm(100*10),nrow=100,ncol=10)
dend <- as.dendrogram(hclust(dist(t(mat))))

を使用してプロットするdendextend

require(dendextend)
dend %>% plot

深さのカットオフを 14.5 に定義すると、次のようになります。

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

ここに画像の説明を入力

私のリストは次のとおりです。

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

2 に答える 2

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

cutree functioninは高さのカットオフ値を受け入れ、グループ メンバーシップをdendextend含む整数を返します。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 
于 2017-01-08T21:35:20.017 に答える
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(.))

おそらくもっとエレガントな方法があると思いますが、これはひどい方法のようには見えません。

編集

ユーザーがここで質問を完全に変更したため、ここに新しい回答があります。

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

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

デンドログラムの各ターミナル ノードの高さにアクセスし、必要な高さより上か下かを判断するだけです。残念ながら、これは同じ親に由来するリーフ ノードをグループ化することはできません。うまくいけば、これであなたの道が開けます。

于 2017-01-08T11:37:04.917 に答える