使用另一个矩阵删除矩阵中的行

时间:2014-07-05 09:26:38

标签: r matrix

假设我有两个矩阵AB

A <- matrix(nrow=5, ncol=2, 1:10)
#        [,1] [,2]
# [1,]    1    6
# [2,]    2    7
# [3,]    3    8
# [4,]    4    9
# [5,]    5   10

B <- matrix(nrow=2, ncol=2, c(2,1,7,6))
#       [,1] [,2]
#  [1,]    2    7
#  [2,]    1    6

我希望得到一个矩阵C,其A行不会出现在B中。所以C应该是:

#       [,1] [,2]
# [1,]    3    8
# [2,]    4    9
# [3,]    5   10

有没有快速的方法(即不使用循环)来做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以尝试setdiff%in%

matrix(setdiff(A,B),ncol=2,byrow=FALSE)
#     [,1] [,2]
#[1,]    3    8
#[2,]    4    9
#[3,]    5   10

matrix(A[!A %in% B],ncol=2,byrow=FALSE)
#     [,1] [,2]
#[1,]    3    8
#[2,]    4    9
#[3,]    5   10

答案 1 :(得分:1)

我会用:

 A[!(A[,1] %in% B[,1] & A[,2] %in% B[,2]),]
#       [,1] [,2]
#[1,]    3    8
#[2,]    4    9
#[3,]    5   10

考虑一下,如果

B[4] <- 5
A[!(A[,1] %in% B[,1] & A[,2] %in% B[,2]),]
#    [,1] [,2]
#[1,]    1    6
#[2,]    3    8
#[3,]    4    9
#[4,]    5   10

另外,你可以

 A[!(apply(A, 1, paste, collapse="") %in% apply(B, 1, paste, collapse="")),]