按列匹配两个矩阵

时间:2015-02-10 15:45:51

标签: r

我有两个矩阵,如下所示:

A

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     

B

  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             

2 个答案:

答案 0 :(得分: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        

答案 1 :(得分:0)

你知道如何使用sqlite吗?

在sqlite中,您可以尝试类似

的内容
SELECT DISTINCT newtable
FROM A 
WHERE newtable Not IN (SELECT DISTINCT newtable FROM B)

创建.db文件太麻烦了

注意:如果你正在运行linux,你已经安装了sqlite或sqlite3