On Mar 17, 2010, at 8:54 PM, dc896148 wrote:
useR's
I have a matrix from which I want to take multiple subsets from,
according
to a particular scheme I will now describe. The matrix below (mat)
is 5x5,
and I want to take 9 subsets of it, each of dimension 3x3. The best
way to
explain what the result should look like is with the following:
dat <- c(3,6,1,9,12,9,2,10,6,5,3,13,1,4,8,9,4,6,10,11,2,7,3,5,10)
miss <- c(2,8,10,16,23)
dat[miss] <- NA
mat <- matrix(dat,5,5)
mat
[,1] [,2] [,3] [,4] [,5]
[1,] 3 9 3 NA 2
[2,] NA 2 13 4 7
[3,] 1 NA 1 6 NA
[4,] 9 6 4 10 5
[5,] 12 NA 8 11 10
I define a multidimensional array to hold the 9 subarrays I want:
subarray <- array(0,dim=c(3,3,9))
I want to populate each 3x3 array within subarray with the value
from mat,
taking the values from mat to be the center values of each array,
respectively. so, excluding the edges of mat, there are 9 values to
build
3x3 arrays from: 2,13,4,NA,1,6,6,4,10
> rc <- 2:4
> cc <- 2:4
> expand.grid(rc,cc)
Var1 Var2
1 2 2
2 3 2
3 4 2
4 2 3
5 3 3
6 4 3
7 2 4
8 3 4
9 4 4
> centers<-expand.grid(rc,cc)
> arr <- array(, c(3,3,9))
> arr[ , , 1:9] <-sapply(1:9, function(x)
mat[(centers$Var1[x]-1):(centers$Var1[x]+1),
(centers$Var2[x]-1):(centers$Var2[x]+1) ])
> arr
, , 1
[,1] [,2] [,3]
[1,] 3 9 3
[2,] NA 2 13
[3,] 1 NA 1
, , 2
[,1] [,2] [,3]
[1,] NA 2 13
[2,] 1 NA 1
[3,] 9 6 4
<snipped>
I suppose you could reverse the roles of Var1 and Var2 to get the
order you used in your example.
--
David.
The output for subarray should look like this:
[,,1]
[,1] [,2] [,3]
[1,] 3 9 3
[2,] NA 2 13
[3,] 1 NA 1
[,,2]
[,1] [,2] [,3]
[1,] 9 3 NA
[2,] 2 13 4
[3,] NA 1 6
[,,3]
[,1] [,2] [,3]
[1,] 3 NA 2
[2,] 13 4 7
[3,] 1 6 NA
...
...
[,,9]
[,1] [,2] [,3]
[1,] 1 6 NA
[2,] 4 10 5
[3,] 8 11 10
I hope this is clear. Does anyone know a quick and efficient way to
do this
in R? I was thinking of FOR loops, but as my matrices get very
large, this
process may take some time. Any ideas?
Thank you in advance
dxc13
--
View this message in context:
http://n4.nabble.com/how-to-take-multiple-subsets-from-a-matrix-tp1597411p1597411.html
Sent from the R help mailing list archive at Nabble.com.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.