Объединение дерева BEAST M CC и внешних метаданных по значению ветви / края? - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь объединить вывод BEAST с метаданными, используя R. До сих пор я следовал этому примеру:

https://yulab-smu.github.io/treedata-book/chapter3.html#combining -дерево с внешними данными

Моя проблема возникает из-за необходимости объединить вывод BEAST с метаданными по значению edge (не label, node, et c.), Поскольку я заинтересован в отображении метаданных ветви в моей филогенетике c tree.

Мне нужно сопоставить данные из моего newick ("x" ниже) с моими внешними данными ("d" ниже) на основе матрицы целых чисел - переменная "edge".

Вот краткое изложение того, что я пробовал:

#format external data for join:
d <- tibble(edge = d$edge,
            trait = d$Line_Bearing)


>d
# A tibble: 95 x 2
   edge[,1]  [,2] trait
      <int> <int> <int>
 1       49    50   284
 2       49    62   104
 3       50    51   285
 4       50    59   257
 5       51    52   344
 6       51     9   169
 7       52    53   304
 8       52     8    95
 9       53    54   239
10       53     7     4
# … with 85 more rows



#format tree for join:

mcc_tree_newick = read.newick("beast_010820_cauchyRRW_JC_strictclock_constantsize.newick")
x <- as_tibble(mcc_tree_newick)
x  #add edges to x
#need to add a row for root to achieve matching column lengths:
root<-NULL
root1<-matrix(0,1)
root2<-matrix(49,1)
root<-cbind(root1,root2)
tree_edges_root<-NULL
tree_edges_root$edge<-rbind(mcc_tree_newick$edge,root)

x <- x %>% add_column(x, tree_edges_root$edge)

names(x)[6]<-"edge"


> x
# A tibble: 95 x 6
   parent  node branch.length label           x$parent $node $branch.length $label          edge[,1]  [,2]
    <int> <int>         <dbl> <chr>              <int> <int>          <dbl> <chr>              <dbl> <dbl>
 1     57     1        0.0525 MH367377_MOY20…       57     1         0.0525 MH367377_MOY20…       49    50
 2     57     2        0.0525 MH367368_MOY20…       57     2         0.0525 MH367368_MOY20…       50    51
 3     56     3        0.156  MH367375_MOY21…       56     3         0.156  MH367375_MOY21…       51    52
 4     55     4        0.0812 MH367346_APA14…       55     4         0.0812 MH367346_APA14…       52    53
 5     58     5        0.0223 MH367344_APA06…       58     5         0.0223 MH367344_APA06…       53    54
 6     58     6        0.0223 MH367347_APA04…       58     6         0.0223 MH367347_APA04…       54    55
 7     53     7        0.319  MH367360_KRD14…       53     7         0.319  MH367360_KRD14…       55    56
 8     52     8        0.476  MH367342_APA26…       52     8         0.476  MH367342_APA26…       56    57
 9     51     9        1.10   MH367378_LUW03…       51     9         1.10   MH367378_LUW03…       57     1
10     60    10        1.70   KY548474_KAY09…       60    10         1.70   KY548474_KAY09…       57     2
# … with 85 more rows


new_tree <- full_join(x, d, by = "edge") 

Моя ошибка: «Ошибка: невозможно объединить по краю» x «ребро» из-за несовместимых типов (матрица / матрица). "

Я понимаю:

(1) full_join ожидает, что правый элемент будет кадром данных. Несмотря на мои попытки обработки данных, я не могу понять, как преобразовать мое «ребро» в объединяемые переменные без потери данных.

(2) Это не воспроизводимый пример - извинения, но я надеясь, что кто-нибудь сможет указать на простое изменение форматирования.

Заранее большое спасибо, A.

...