Hi everyone, have a small problem trying to converting a dataset in matrix form to an array. Specifically: data include 3D measurement -x,y,z of 59 points in 36 objects. They are stored as a matrix (x) of 2124 rows and 3 columns. What I want to do is to extract each subject's dataset using an array (b). Accordingly, I tried the following command: b<-array(a,c(59,3,36)). The problem is that the resulting array for some strange reason change the order of the original data. Specifically, I noticed that, for example, in the first subject, the x y z values of the first point are the x values of the first 3 subjects. Did I perhaps missed something? Thanks in advance -- View this message in context: http://r.789695.n4.nabble.com/converting-matrix-in-array-tp3775025p3775025.html Sent from the R help mailing list archive at Nabble.com.
On Aug 28, 2011, at 5:09 PM, marco wrote:> Hi everyone, > have a small problem trying to converting a dataset in matrix form > to an > array. > Specifically: data include 3D measurement -x,y,z of 59 points in 36 > objects. > They are stored as a matrix (x) of 2124 rows and 3 columns. > What I want to do is to extract each subject's dataset using an > array (b). > Accordingly, I tried the following command: > > b<-array(a,c(59,3,36)). > > The problem is that the resulting array for some strange reason > change the > order of the original data.Not for a "strange reason". The 59 elements in b in column-1 would be the same in both , but you don't seem to realize that the 60th through the 118th elements in your original matrix were also all in the x- column. You have now effectively moved those values to what you were thinking to use as the y-column.> Specifically, I noticed that, for example, in the first subject, the > x y z > values of the first point are the x values of the first 3 subjects.You should have kept the last dimension the same and redimension the object/points indexing by factoring the 2124 rows into what will become columns and row and leave the xyz coordinates "at the end". I think that redimensioning as b<-array(a,c(59, 36, 3)) would have re- folded it sensiblyly. So the b[n,m,] call would retrieve xyz- coordinates from the n-th point of the m-th object.> > Did I perhaps missed something? > Thanks in advance > > > > -- > View this message in context: http://r.789695.n4.nabble.com/converting-matrix-in-array-tp3775025p3775025.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at 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.David Winsemius, MD West Hartford, CT
It helps to consider a small self-containd example where the correct answer is obvious. Does the following look like your input and desired output? > a <- rbind(c("obj1-ptA-x", "obj1-ptA-y", "obj1-ptA-z"), + c("obj1-ptB-x", "obj1-ptB-y", "obj1-ptB-z"), + c("obj2-ptA-x", "obj2-ptA-y", "obj2-ptA-z"), + c("obj2-ptB-x", "obj2-ptB-y", "obj2-ptB-z")) > a [,1] [,2] [,3] [1,] "obj1-ptA-x" "obj1-ptA-y" "obj1-ptA-z" [2,] "obj1-ptB-x" "obj1-ptB-y" "obj1-ptB-z" [3,] "obj2-ptA-x" "obj2-ptA-y" "obj2-ptA-z" [4,] "obj2-ptB-x" "obj2-ptB-y" "obj2-ptB-z" > aperm(array(a, c(2, 2, 3)), c(1,3,2)) , , 1 [,1] [,2] [,3] [1,] "obj1-ptA-x" "obj1-ptA-y" "obj1-ptA-z" [2,] "obj1-ptB-x" "obj1-ptB-y" "obj1-ptB-z" , , 2 [,1] [,2] [,3] [1,] "obj2-ptA-x" "obj2-ptA-y" "obj2-ptA-z" [2,] "obj2-ptB-x" "obj2-ptB-y" "obj2-ptB-z" Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com> -----Original Message----- > From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of marco > Sent: Sunday, August 28, 2011 2:10 PM > To: r-help at r-project.org > Subject: [R] converting matrix in array > > Hi everyone, > have a small problem trying to converting a dataset in matrix form to an > array. > Specifically: data include 3D measurement -x,y,z of 59 points in 36 objects. > They are stored as a matrix (x) of 2124 rows and 3 columns. > What I want to do is to extract each subject's dataset using an array (b). > Accordingly, I tried the following command: > > b<-array(a,c(59,3,36)). > > The problem is that the resulting array for some strange reason change the > order of the original data. > Specifically, I noticed that, for example, in the first subject, the x y z > values of the first point are the x values of the first 3 subjects. > > Did I perhaps missed something? > Thanks in advance > > > > -- > View this message in context: http://r.789695.n4.nabble.com/converting-matrix-in-array- > tp3775025p3775025.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help at 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.