Преобразование списка взаимодействий наркотик-ген в матрицу сходства в R - PullRequest
0 голосов
/ 13 сентября 2018

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

Например, код ниже:

DGIdbpractice <- data.frame(c("drug1", "drug1", "drug1", "drug2", "drug2", "drug3","drug3","drug3"), c("gene1", "gene2", "gene3", "gene2", "gene3", "gene1", "gene3", "gene4"))
names(DGIdbpractice) <- c("drug", "gene")

Создает кадр данных, который выглядит следующим образом:

  drug  gene
1 drug1 gene1
2 drug1 gene2
3 drug1 gene3
4 drug2 gene2
5 drug2 gene3
6 drug3 gene1
7 drug3 gene3
8 drug3 gene4

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

Это должно выглядеть как приведенная ниже матрица:

      gene1 gene2 gene3 
drug1  3     2     2
drug2  2     2     1
drug3  2     1     3 

Я не хочу использовать несколько циклов, так как фактический набор данных содержит более 4000 лекарств.

Спасибо.

1 Ответ

0 голосов
/ 14 сентября 2018

Вы можете использовать dplyr с функцией table().

b <- DGIdbpractice %>% full_join(DGIdbpractice, by = "gene")
table(b$drug.x, b$drug.y)

        drug1 drug2 drug3
  drug1     3     2     2
  drug2     2     2     1
  drug3     2     1     3
...