如何计算要插入维恩图中的巨大数据库

时间:2017-02-17 18:08:59

标签: r venn-diagram

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

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)

我想构建一个这样的逻辑表:

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)

最后对群组进行分类: 我们的想法是能够计算可能的&#34; true&#34;的唯一标签的数量。和&#34;假&#34;组最终使用venneuler包(Venn diagram proportional and color shading with semi-transparency)将每个组的编号包含在维恩图中

2 个答案:

答案 0 :(得分:3)

您可以使用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只是为了减少打字,可能有点清晰。

答案 1 :(得分:1)

table肯定更容易。另一种方法是先将breeds分割为tag,然后再分割为Breed,并计算每个子组中的行数。

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会返回逻辑。