0

我是编程新手,刚刚开始学习 R,因此请求请原谅我的无知。我目前正在处理如下所示的数据:

我有以下格式的数据。

例如:

疾病 基因 符号
疾病 A FOXJ1
疾病 B MYB
疾病 B GATA4
疾病 C MYB
疾病 D GATA4

大约有 250 个这样的条目。我想查看以下格式的数据:

疾病 1 常见的共享基因符号 疾病 2

疾病 A MYB,FOXJ1 疾病 B

疾病 C MYB 疾病 B

疾病 B GATA4 疾病 D

我接近这个的方式:我将过程分为三个步骤:

第 1 步:对疾病进行成对组合。

第 2 步:找到与每种疾病相关的基因符号,并将它们分配给一个向量。

第 3 步:现在对这些创建的向量使用 intersect (%n%) 函数来查找共享基因符号。

我相信一定有比这简单得多的东西。

任何帮助将不胜感激!非常感谢!

问候,小号

4

1 回答 1

3

使用combinat包的解决方案是:

library(combinat)

#random data
DF <- data.frame(Disease = LETTERS[1:10], Gene = sample(letters[1:4], 10, T))

#> DF
#   Disease Gene
#1        A    a
#2        B    a
#3        C    c
#4        D    b
#5        E    d
#6        F    b
#7        G    c
#8        H    d
#9        I    b
#10       J    d

#all possible combinations of diseases
dis_combns <- combn(DF$Disease, 2)  #see `?combn`

#find common genes between each pair of diseases
commons <- apply(dis_combns, 2, 
       function(x) union(DF$Gene[DF$Disease == x[1]], DF$Gene[DF$Disease == x[2]])) 
#format the list of common genes for easier manipulation later
commons <- unlist(lapply(commons, paste, collapse = " and "))

#result
resultDF <- data.frame(Disease1 = dis_combns[1,], 
                     Common_genes = commons, Disease2 = dis_combns[2,])

#> resultDF
#   Disease1 Common_genes Disease2
#1         A            a        B
#2         A      a and c        C
#3         A      a and b        D
#4         A      a and d        E
#5         A      a and b        F
#6         A      a and c        G
#7         A      a and d        H
#8         A      a and b        I
#9         A      a and d        J
#10        B      a and c        C
#11        B      a and b        D
#12        B      a and d        E
#13        B      a and b        F
#14        B      a and c        G
#....
于 2013-10-24T20:09:59.193 回答