R - 获取两个矩阵具有相等行的行号

时间:2015-03-05 17:30:07

标签: r matrix find rows equals

我必须使用矩阵,但我不希望哪些行相同。

假设我有一个矩阵A看起来像这样: A = matrix(1:12, 4, 3, byrow=T)

  

[,1] [,2] [,3]

     

[1,] 1 2 3

     

[2,] 4 5 6

     

[3,] 7 8 9

     

[4,] 10 11 12

较短的矩阵B:B <-matrix(c(0,2,2,7,8,9,4,5,6),3,3,byrow=T)

  

[,1] [,2] [,3]

     

[1,] 0 2 2

     

[2,] 7 8 9

     

[3,] 4 5 6

我想要的是当行也出现在B中时A的行号。 在此示例中,我想获得:23

我尝试用setkey解决它,但后来我只得到行而不是行数,因为矩阵是第一次排序。

3 个答案:

答案 0 :(得分:3)

或者,您可以使用match_df中的plyr

match_df(data.frame(A),data.frame(B))
Matching on: X1, X2, X3
  X1 X2 X3
2  4  5  6
3  7  8  9

要提取您可以输入as.numeric(rownames(match_df(data.frame(A),data.frame(B))))

的行数

答案 1 :(得分:1)

您可以rbind将矩阵放在一起,并使用duplicated找出重复的行:

> duplicated(rbind(A, B), fromLast = TRUE)
[1] FALSE  TRUE  TRUE FALSE FALSE FALSE FALSE
> which(duplicated(rbind(A, B), fromLast = TRUE))
[1] 2 3

答案 2 :(得分:1)

我知道这样做的最好方法是按行将矩阵转换为字符串:

sA <- apply(A,1,paste,collapse=' ')
sB <- apply(B,1,paste,collapse=' ')

which(sA %in% sB)
# [1] 2 3