我有一个矩阵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
非常感谢!
答案 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