R, как создать бинарную матрицу отношений из списка строк? - PullRequest
1 голос
/ 15 мая 2019

У меня есть список файлов, содержащих определенные гены, и я хочу создать матрицу бинарных отношений в R, которая показывает присутствие каждого гена в каждом файле.

Например, вот мои файлы aaa, bbb, ccc и ddd и связанные с ними гены.

aaa=c("HERC1")
bbb=c("MYO9A", "PKHD1L1", "PQLC2", "SLC7A2")
ccc=c("HERC1")
ddd=c("MACC1","PKHD1L1")

Я хотел бы знать, какую команду я мог бы использовать в R для создания бинарной таблицы отношений, как показано на следующем рисунке:

enter image description here

, где значение 1 означает ассоциацию, а значение 0 означает неассоциирование.

Как я могу сделать эту операцию в R?

Я пытался использовать table(aaa,bbb,ccc,ddd), но это не сработало. Р сказал:

Ошибка в таблице (aaa, bbb, ccc, ddd): все аргументы должны иметь одинаковая длина

РЕДАКТИРОВАТЬ : Спасибо @akrun за полезный ответ! Я воспользуюсь этим вопросом, чтобы попросить помощи по другой проблеме , и я уверен, что вы, ребята, справитесь очень быстро. Для второй части моего анализа мне нужно сгенерировать еще одну таблицу, в которой, для каждой пары генов, я присваиваю значение 1, если они оба присутствуют в конкретном файле, и 0 другим . Следуя примеру, который я привел ранее, эта новая таблица должна выглядеть примерно так (я переношу ее для пояснения):

enter image description here

Кто-нибудь знает быстрый способ получения этой новой бигенической таблицы в R, начиная с команд, которые вы, ребята, уже предоставили мне? Спасибо!

1 Ответ

2 голосов
/ 15 мая 2019

Можно было бы получить значения идентификаторов объекта в именованном list (mget), stack в двухстолбцовом data.frame и получить частоту с table

table(stack( mget(strrep(letters[1:4], 3)))[2:1])
#   values
#ind   HERC1 MACC1 MYO9A PKHD1L1 PQLC2 SLC7A2
#  aaa     1     0     0       0     0      0
#  bbb     0     0     1       1     1      1
#  ccc     1     0     0       0     0      0
#  ddd     0     1     0       1     0      0

Или опция с tidyverse

library(tidyverse)
lst(aaa, bbb, ccc, ddd) %>% 
  enframe %>% 
  unnest %>% 
  count(name, value) %>% 
  spread(value, n, fill = 0)
# A tibble: 4 x 7
#  name  HERC1 MACC1 MYO9A PKHD1L1 PQLC2 SLC7A2
#  <chr> <dbl> <dbl> <dbl>   <dbl> <dbl>  <dbl>
#1 aaa       1     0     0       0     0      0
#2 bbb       0     0     1       1     1      1
#3 ccc       1     0     0       0     0      0
#4 ddd       0     1     0       1     0      0

В коде ОП

table(aaa,bbb,ccc,ddd)

length из vector должны быть одинаковыми, чтобы table работал. Кроме того, если мы используем более 2 векторов, таблица частот будет многомерной (> 2D). Итак, нам нужна структура, чтобы table применялся к двум столбцам вместо нескольких объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...