Преобразование списка взаимодействий лекарство-ген в матрицу сходства в r

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

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

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 лекарств.

Спасибо.

0
0
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать 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

Другие вопросы по теме