Я выполняю некоторые биогеографические анализы в R, и результат кодируется как пара матриц. Столбцы представляют географические регионы, строки указывают узлы в филогенетическом дереве, а значения в матрице представляют собой вероятность того, что событие ветвления произошло в географическом регионе, указанном в столбце. Очень простой пример:
> One_node<-matrix(c(0,0.8,0.2,0),
+ nrow=1, ncol=4,
+ dimnames = list(c("node 1"),
+ c("A","B","C","D")))
> One_node
A B C D
node_1 0 0.8 0.2 0
В этом случае наиболее вероятным местоположением node_1 является регион B. На самом деле результат анализа кодируется в виде двух отдельных матриц 79x123. Первая — это вероятности того, что узел займет данную область до события, а вторая — это вероятности того, что узел займет данную область после события (rowSums=1). Несколько более сложных примеров:
before<-matrix(c(0,0,0,0,0.9,
0.8,0.2,0.6,0.4,0.07,
0.2,0.8,0.4,0.6,0.03,
0,0,0,0,0),
nrow=5, ncol=4,
dimnames = list(c("node_1","node_2","node_3","node_4","node_5"),
c("A","B","C","D")))
after<-matrix(c(0,0,0,0,0.9,
0.2,0.8,0.4,0.6,0.03,
0.8,0.2,0.6,0.4,0.07,
0,0,0,0,0),
nrow=5, ncol=4,
dimnames = list(c("node_1","node_2","node_3","node_4","node_5"),
c("A","B","C","D")))
> before
A B C D
node_1 0.0 0.80 0.20 0
node_2 0.0 0.20 0.80 0
node_3 0.0 0.60 0.40 0
node_4 0.0 0.40 0.60 0
node_5 0.9 0.07 0.03 0
> after
A B C D
node_1 0.0 0.20 0.80 0
node_2 0.0 0.80 0.20 0
node_3 0.0 0.40 0.60 0
node_4 0.0 0.60 0.40 0
node_5 0.9 0.03 0.07 0
В частности, меня интересует только извлечение номеров строк, где столбец B является самым высоким в before
, а столбец C является самым высоким в after
, и наоборот, поскольку я пытаюсь извлечь номера узлов в дереве, где таксоны переместились B- > C или С->Б.
Итак, результат, который я ищу, будет примерно таким:
> BC
[1] 1 3
> CB
[1] 2 4
Будут строки, в которых B>C или C>B, но ни одна из них не будет самой высокой в строке (node_5), и мне нужно их игнорировать. Затем номера строк используются для запроса отдельного фрейма данных, который предоставляет нужные мне данные.
Я надеюсь, что все это имеет смысл. Заранее благодарю за любой совет!