r语言 如何匹配两个矩阵

比如有两个矩阵

a
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 7
[4,] 4 8
b
[,1] [,2]
[1,] 1 5
[2,] 2 6
[3,] 3 0
[4,] 4 0

想提取a和b两列相同的部分,提取 (1,5) 和 (2,6) 如何做到阿?

a <- 1:8
a <- matrix(a,4,2)
a
b <- c(1:6,0,0)
b <- matrix(b,4,2)
b
c <- a==b
c
#求一个向量表示行是不是相同
apply(c,1,all)
index <- apply(c,1,all)
#只取相同的行
a[index,]

追问

非常感谢!
另外有一个问题,如果a和b的行不对应,如何找出所有匹配呢?比如
a
[,1] [,2]

[3,] 2 6
[4,] 1 5
b
[,1] [,2]
[1,] 1 5
[2,] 2 6

a的第四和第三行于b的第一和第二行相同,这样的话如何把相同的行取出来呢?

追答a <-c(2,6,1,5)
a <- matrix(a,2,2,byrow=T)
b <- c(1,5,2,6)
b <- matrix(b,2,2,byrow=T)
res <- matrix(0,1,dim(b)[2])
i <-2
for(i in 1:dim(a)[1]){
temp <- rep(a[i,],dim(b)[1])
temp <- matrix(temp,dim(b)[1],dim(b)[2],byrow=T)
c <- temp==b
apply(c,1,all)
        index <- apply(c,1,all)
res <- rbind(res,b[index,])
}
res[2:dim(res)[1],]

类似于一个一个对比,将A的每一行构造成和B结构一样的矩阵,记录相同的行,依次进行。R语言这样实现效率也不高。

能不能看懂就看你的能力了。

温馨提示:答案为网友推荐,仅供参考
相似回答