[R] comparing two matrices
Marc Schwartz
marc_schwartz at comcast.net
Sun Jan 21 00:06:30 CET 2007
On Sun, 2007-01-21 at 00:14 +0200, Adrian Dusa wrote:
> Dear helpeRs,
>
> I have two matrices:
> mat1 <- expand.grid(0:2, 0:2, 0:2)
> mat2 <- aa[c(19, 16, 13, 24, 8), ]
>
> where mat2 is always a subset of mat1
>
> I need to find the corersponding row numbers in mat1 for each row in mat2.
> For this I have the following code:
>
> apply(mat2, 1, function(x) {
> which(apply(mat1, 1, function(y) {
> sum(x == y)
> }) == ncol(mat1))
> })
>
> The code is vectorized, but I wonder if there is a simpler (hence faster)
> matrix computation that I miss.
>
> Thank you,
> Adrian
I have not fully tested this, but how about:
mat1 <- matrix(1:20, ncol = 4, byrow = TRUE)
mat2 <- matrix(1:60, ncol = 4, byrow = TRUE)
mat2 <- mat2[sample(15), ]
> mat1
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16
[5,] 17 18 19 20
> mat2
[,1] [,2] [,3] [,4]
[1,] 13 14 15 16
[2,] 5 6 7 8
[3,] 41 42 43 44
[4,] 17 18 19 20
[5,] 21 22 23 24
[6,] 25 26 27 28
[7,] 53 54 55 56
[8,] 9 10 11 12
[9,] 57 58 59 60
[10,] 33 34 35 36
[11,] 49 50 51 52
[12,] 45 46 47 48
[13,] 1 2 3 4
[14,] 29 30 31 32
[15,] 37 38 39 40
> which(apply(matrix(mat2 %in% mat1, dim(mat2)), 1, all))
[1] 1 2 4 8 13
HTH,
Marc Schwartz
More information about the R-help
mailing list