2016-02-25 77 views
-1

如何在多個樣本間相交?在R中相交多個數據集

我有29個根據基因名稱,cc變化,座標構建的連接列表。每個名單是400-800長。我需要建立一個表格,顯示所有812組合的兩個列表共享多少個變體。有什麼辦法可以在R中做到這一點?

例如:如果我有4個列表。

A<-c("TSC22112517","SLC141T43309911","RAD51D33446609","WRN31024638") 

B<-c("TSC22112517","SLC14A143309911","RHBDF274474996","WRN31024638") 

C<-c("TSC22112517","SLC14A143309911","RAD51D33446609","MEN164575556") 

D<-c("FANCM45665468","SLC14A143309911","RAD51D33446609","MEN164575556") 

我只需要找出多少個變體是相互之間的碎片。

AB<-length(intersect(A,B)) 

給我通過共享變量的#和B這3 然後,我可以得到一個表像下圖給出了共同的變體#:

A  B  C  D 
A 4  3  2  2 
B 3  4  3  2 
C 2  3  4  2 
D 2  2  2  4 

如何做到這一點的大列表數量? 我有29個列表,每個列表有600個變體。

+0

可以總結你的需求,包括一些最起碼的數據集和代碼來加載它,這很難從解釋中找出 – HubertL

+0

你能更具體嗎?如果您發佈更多關於輸入格式的細節,您需要的結果和最佳嘗試的代碼,您將有更多的機會獲得良好的答案。謝謝 – lrnzcig

+0

歡迎來到StackOverflow!請閱讀關於[如何提出一個好問題](http://stackoverflow.com/help/how-to-ask)以及如何給出[可重現的示例]的信息(http://stackoverflow.com/questions/ 5963269 /如何對化妝一個偉大-R-重複性,例如/ 5963610)。這會讓其他人更容易幫助你。 – Jaap

回答

0

你可以嘗試這樣的事:我做了很多的事情列表...

#x is your data in list() format 
shared<-list() 
for (i in 1:29){ 
    shared[[i]]<-list() 
    for (j in 1:29){ 
    if (i != j){ 
     shared[[i]][[j]]<-x[[i]][x[[i]][,2]==x[[j]][,2]] 
    } 
    } 
} 
+0

謝謝。我找到了你的幫助。但我改變了一點點。 – lance

0

很高興弄明白

x<- list() 
shared<-matrix(1:841,ncol=29) 
temp<-NULL 
for (i in 1:29){ 
    for (j in 1:29){ 
    temp[j] <- length(intersect(x[[i]][[1]],x[[j]][[1]])) 
    } 
    shared[,i] <- matrix(temp) 
} 
shared