代码之家  ›  专栏  ›  技术社区  ›  NewUsr_stat

按列匹配两个矩阵

r
  •  0
  • NewUsr_stat  · 技术社区  · 11 年前

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

    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列。这两个矩阵具有相同的列数和相同的列名。

    有人能帮我吗?

    最好的

    所需输出: C

    ColumnA   ColumnB   ColumnC    ColumnD     
       A         N         N          S            
       P         AS        A          Q    
                 n         K          E      
                           O             
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   akrun    11 年前

    你可以试试

    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        
    
        2
  •  0
  •   isebarn    11 年前

    你知道如何使用sqlite吗?

    在sqlite中,您可以尝试

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

    创建.db文件不会太麻烦

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