我有一个相互作用列表,其中第一列包含不同的药物,第二列包含与药物相互作用的基因。
例如下面的代码:
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
我不想使用多个循环,因为实际数据集包含4,000多种药物。
谢谢。
答案 0 :(得分: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