如何统计一个巨大的数据库要插入维恩图

How to count a huge database to be inserted into a Venn diagram

我有一个像这个例子的table:

breeds <- "tag  Chr Position Breed
chr1-2157  1  2157 BRL
chr1-2157  1  2157 GOT
chr1-2157  1  2157 HED
chr1-2157  1  2157 KIN
chr2-2185  2  2185 BRL
chr2-2185  2  2185 GOT
chr2-2185  2  2185 HED
chr3-2189  3  2185 BRL"
breeds <-read.table(text=breeds,header=T)

我想构造一个合乎逻辑的 table,如下所示:

final <- "tag  BRL GOT HED KIN 
chr1-2157  TRUE  TRUE TRUE TRUE
chr2-2185  TRUE  TRUE TRUE FALSE
chr3-2189  TRUE  FALSE FALSE FALSE"
final <-read.table(text=final,header=T)

最后对组进行分类: 这个想法是能够计算可能的 "true" 和 "false" 组的唯一标签的数量,最终使用 venneuler 包将每个组的数量包含在维恩图中(Venn diagram proportional and color shading with semi-transparency)

您可以使用 table 函数以及逻辑比较来计算:

with(breeds, table(tag, Breed)) > 0
           Breed
tag          BRL   GOT   HED   KIN
  chr1-2157 TRUE  TRUE  TRUE  TRUE
  chr2-2185 TRUE  TRUE  TRUE FALSE
  chr3-2189 TRUE FALSE FALSE FALSE

table 本身会产生频率计数。添加 > 0 返回逻辑。 with 只是为了减少打字,也许是为了更清晰。

table肯定更容易。另一种方法是先将 breeds 拆分为 tag,然后再拆分为 Breed,然后计算每个 sub-group.

中的行数
t(sapply(split(breeds, breeds$tag), function(a)
           sapply(split(a, a$Breed), function(b)
                                       nrow(b)>0 )))

#           BRL   GOT   HED   KIN
#chr1-2157 TRUE  TRUE  TRUE  TRUE
#chr2-2185 TRUE  TRUE  TRUE FALSE
#chr3-2189 TRUE FALSE FALSE FALSE 

就像在 lmo 的解决方案中一样,您最初得到的是频率计数并添加 >0 returns 逻辑。