VennDiagram创建了vennCounts列表

时间:2011-03-21 09:14:21

标签: r venn-diagram

我有一张这样的表:

> updownregtable                                                           
             PIM WDR MYC OBX                                               
ILMN_1651282 0   0   0   0                                                 
ILMN_1651354 0   0   0   0                                                 
ILMN_1651358 0   0   0   0                                                 
ILMN_1656638 0   0   0   0                                                 
ILMN_1657235 0   0   0   0                                                 
ILMN_1657639 -1  0   0   0  

rownames是基因的代码。这些名称是单元格中的转染。

我使用以下链接中的函数创建了一个vennDiagram: http://bioinfo-mite.crb.wsu.edu/Rcode/Venn.R

在制作vennDiagram之前,vennCounts结果给出了这个输出:

> vennCounts(regulationtable)
      PIM WDR MYC OBX Counts
 [1,]   0   0   0   0    740
 [2,]   0   0   0   1      5
 [3,]   0   0   1   0      1
 [4,]   0   0   1   1      0
 [5,]   0   1   0   0      4
 [6,]   0   1   0   1      1
 [7,]   0   1   1   0      0
 [8,]   0   1   1   1      0
 [9,]   1   0   0   0      6
[10,]   1   0   0   1      0
[11,]   1   0   1   0      0
[12,]   1   0   1   1      0
[13,]   1   1   0   0      1
[14,]   1   1   0   1      0
[15,]   1   1   1   0      0
[16,]   1   1   1   1      0

现在我想在每一行中创建一个存储在该组中的所有基因名称中的列表。例如像这样:

第1组 - 创建一个包含740个基因名的列表

第2组 - 创建一个包含5个基因名的列表

第3组 - 创建一个包含1个基因名的列表

第5组 - 创建一个包含4个基因名的列表

第6组 - 创建一个包含1个基因名的列表

第9组 - 创建一个包含6个基因名的列表

第13组 - 创建一个包含1个基因名的列表。

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

这是一种可能的解决方案。基本上它涉及将矩阵转换为字符向量,因为有方便的函数来匹配文本字符串。

## create an example matrix - analagous to your 'updownregtable'                                                                               
nc <- 4
nr <- 1000
M <- matrix(rbinom(nr*nc,1,0.5),
            nrow = nr, ncol = nc,
            dimnames = list(sapply(1:nr, function(i) paste(sample(letters,5),collapse='')),paste('V',1:nc)))
## function for converting rows of a matrix to lines of text                                                                                   
matrix2text <- function(y) apply(y,1,function(x)paste(x,collapse=','))
## unique entries - analagous to the first four columns of your matrix                                                                         
## vennCounts(regulationtable)                                                                                                                 
Mu <- matrix2text(unique(M))
names(Mu) <- NULL
## convert the full matrix to text                                                                                                             
Mc <- matrix2text(M)
## find the matching groups                                                                                                                    
matching.groups <- sapply(Mu,function(x)names(grep(x,Mc,value=TRUE)))
## here are the counts per group                                                                                                               
counts.per.group <- sapply(matching.groups,length)