2017-01-08 25 views
2

Мне интересно, каким образом для заданной глубины в dendrogram Я могу получить для каждой ветви ниже этой глубины отсечения список имен всех листьев, которые являются его потомков.Получение имен отпуска под ветвями для заданной глубины

Например я создаю этот dendrogram:

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

Plotting его с помощью dendextend:

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

Вам просто нужно открыть высоту каждого терминала узла в дендрограммы и определить, если он выше или ниже той высоты, которую вы хотите. К сожалению, это не будет группировать листовые узлы, которые поступают от одного и того же родителя, - однако это не должно быть слишком сложно добавить с небольшим изменением. Надеюсь, это поможет вам.

+0

просто примечание: Вам нужен пакет magrittr использовать функцию%>%, но это не имеет решающего значения для кода - просто все становится лучше. – SamPassmore

+0

Я уточнил свой вопрос, чтобы сделать его более ясным – dan

+0

Хорошо - этот вопрос ясен, но это совершенно новый вопрос. Перед тем, как вы спросили о таксономии, как структуры, используя пакет data.tree. Теперь вы спрашиваете о дендрограммах, используя пакет статистики. Чего вы пытаетесь достичь? – 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 в 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 

 Смежные вопросы

  • Нет связанных вопросов^_^