删除矩阵A中出现在矩阵B中的行(B是A的子集)

时间:2016-04-13 11:09:06

标签: r

我有一个矩阵A:

> A
      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]    1    2    3
[5,]    4    5    6
[6,]    7    8    9

和矩阵B:

> B
      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6

我想删除矩阵A中的行,它们出现在B中。 结果应该是:

> C
      [,1] [,2] [,3]    
[1,]    7    8    9
[2,]    7    8    9

非常感谢!

3 个答案:

答案 0 :(得分:2)

我们可以使用anti_join

library(dplyr)
as.matrix(anti_join(as.data.frame(A), as.data.frame(B)))
#     V1 V2 V3
#[1,]  7  8  9
#[2,]  7  8  9

答案 1 :(得分:1)

首先创建以上两个matricies

A <- matrix(rep(c(1:9),2),ncol=3,byrow = T)
B <- matrix(1:6,ncol=3,byrow = T)

获取要删除的行的索引

Indx <- apply(B,1,function(x) apply(A,1,function(y) all.equal(x,y)))
Indx <- apply(Indx,1,any)

从第一个矩阵中删除行

A[-which(Indx),]

答案 2 :(得分:0)

match_df包中使用plyr函数。

    library(plyr)
    A = matrix(rep(1:9,2),nrow=6,byrow=T)
    B = matrix(1:6,nrow=2,byrow=T)

    M_ROWS = as.numeric(rownames(match_df(data.frame(A),data.frame(B))))
    # Matching on: X1, X2, X3

    Result <- A[-M_ROWS,]
    Result
    #      [,1] [,2] [,3]
    # [1,]    7    8    9
    # [2,]    7    8    9