2017-02-17 58 views
1

我有一個表像這樣的例子:如何算一個龐大的數據庫中插入一個維恩圖

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) 

以最終對組進行分類: 這個想法是能夠使用venneuler程序包計算可能的「真」和「假」組的唯一標籤的數量,以最終使每個組的數量包括在維恩圖中Venn diagram proportional and color shading with semi-transparency

回答

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

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返回邏輯值。

相關問題