У меня есть очень специфическая структура data.frame, содержащая данные о происхождении клеток, которые мне нужно преобразовать во вложенные списки структуры дендрограммы, чтобы построить результирующие деревья и цветные листы с помощью пакета dendextend.
Мои данные имеютследующая структура:
Mother Daughter MotherLifeTime Var
A Aa 10 8
A Ab 10 8
Aa Aaa 11 2
Aa Aab 11 2
Ab Aba 12 4
Ab Abb 12 4
Aba NA 15 6
Abb NA 14 7
Aaa NA 16 7
Aab NA 15 9
У каждой Матери обычно есть две Дочери, у конечных ветвей нет ни одной.Длина веток указывается MotherLifetime.У каждой ячейки есть некоторое измерение, связанное с ней в переменной Var, которое я хочу использовать для окрашивания или маркировки ветвей.
df <- data.frame(Mother=c("A","A","Aa","Aa","Ab","Ab","Aba","Abb","Aaa","Aab"),
Daugther=c("Aa","Ab","Aaa","Aab","Aba","Abb",NA,NA,NA,NA),
MotherLifeTime=c(10,10,11,11,12,12,15,14,16,15),
Var=c(8,8,2,2,4,4,6,7,7,9))
Я хочу преобразовать этот data.frame в объект класса дендрограммы - то есть список списков с атрибутами.Структура будет выглядеть примерно так:
library(dendextend)
dend <- c(1:4) %>% dist %>% hclust %>% as.dendrogram
labels(dend) <- c("Aaa","Aab","Aba","Abb")
dend %>% unclass %>% str
Структура будет выглядеть примерно так (здесь нет корня A, а ветви не имеют правильной длины)
List of 2
$ :List of 2
..$ : int 1
.. ..- attr(*, "label")= chr "Aaa"
.. ..- attr(*, "members")= int 1
.. ..- attr(*, "height")= num 0
.. ..- attr(*, "leaf")= logi TRUE
..$ : int 2
.. ..- attr(*, "label")= chr "Aab"
.. ..- attr(*, "members")= int 1
.. ..- attr(*, "height")= num 0
.. ..- attr(*, "leaf")= logi TRUE
..- attr(*, "members")= int 2
..- attr(*, "midpoint")= num 0.5
..- attr(*, "height")= num 1
$ :List of 2
..$ : int 3
.. ..- attr(*, "label")= chr "Aba"
.. ..- attr(*, "members")= int 1
.. ..- attr(*, "height")= num 0
.. ..- attr(*, "leaf")= logi TRUE
..$ : int 4
.. ..- attr(*, "label")= chr "Abb"
.. ..- attr(*, "members")= int 1
.. ..- attr(*, "height")= num 0
.. ..- attr(*, "leaf")= logi TRUE
..- attr(*, "members")= int 2
..- attr(*, "midpoint")= num 0.5
..- attr(*, "height")= num 1
- attr(*, "members")= int 4
- attr(*, "midpoint")= num 1.5
- attr(*, "height")= num 3
Спасибо за любыесовет.
Радек