假设我有两个矩阵A
和B
:
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
有没有快速的方法(即不使用循环)来做到这一点?
答案 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="")),]