2015-02-10 135 views
0

我有兩個矩陣列看起來像這樣的:匹配兩個矩陣由

一個

ColumnA ColumnB ColumnC ColumnD  
    A   D   N   F    
    DF  N   A   S  
    P   F   K   l  
    qw  AS  O   W  
      n   H   Q  
         D   E  

ColumnA ColumnB ColumnC ColumnD  
    A   DH  K   FS    
    np   N   A   S  
    AS   Q   O   lm  
    P   n   N   WE  
       AS  PV   Q  
         NQ   E  

我想第三包含共同元素的矩陣C.在兩個矩陣之間逐列排列。 我試圖通過使用R來完成這項工作,但由於兩個矩陣太大,似乎不可能:〜5000行和1500列。這兩個矩陣具有相同的列數和相同的列名稱。

任何人都可以幫助我嗎?

最佳

所需的輸出: Ç

ColumnA ColumnB ColumnC ColumnD  
    A   N   N   S    
    P   AS  A   Q  
      n   K   E  
         O    
+0

你可以給你想要的輸出爲你的例子? – Dason 2015-02-10 15:52:20

回答

2

你可以嘗試

library(stringi) 
#Here `A` and `B` are "data.frames" 
m1 <- stri_list2matrix(Map(`intersect`, A, B), fill='') 
C <- setNames(as.data.frame(m1, stringsAsFactors=FALSE), colnames(A)) 
C 
# ColumnA ColumnB ColumnC ColumnD 
# 1  A  N  N  S 
# 2  P  AS  A  Q 
# 3    n  K  E 
# 4      O   

或者

lst <- lapply(rbind(A,B), function(x) x[duplicated(x)& x!='']) 
m2 <- sapply(lst, `length<-`, max(sapply(lst, length))) 
m2[is.na(m2)] <- '' 
as.data.frame(m2, stringsAsFactors=FALSE) 
# ColumnA ColumnB ColumnC ColumnD 
#1  A  N  K  S 
#2  P  n  A  Q 
#3    AS  O  E 
#4      N   
+0

我用「stringi」庫解決了。它工作得很好。萬分感謝! – Elb 2015-02-10 17:19:55

0

你知道如何使用SQLite?

SQLite中,你可以嘗試像

SELECT DISTINCT newtable 
FROM A 
WHERE newtable Not IN (SELECT DISTINCT newtable FROM B) 

它shoulnt太多麻煩,以創建一個.db文件

注意:如果你正在運行的Linux有sqlite的sqlite3的或者已經安裝