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的行号。
在这个例子中,我想得到:2
和 3
.
我试图用 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))))
我必须矩阵,我不想知道哪些行是相同的。
假设我有一个如下所示的矩阵 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的行号。
在这个例子中,我想得到:2
和 3
.
我试图用 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))))