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

R - Get row numbers where two matrices have equal rows

我必须矩阵,我不想知道哪些行是相同的。

假设我有一个如下所示的矩阵 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 解决它,但由于矩阵是第一次排序,所以我只得到行而不是行数。

您可以 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

据我所知,最好的方法是按行将矩阵转换为字符串:

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

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

或者您可以使用 match_df from 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))))