Dear R Users, Lets assume I have this data frame: x y z 1 1.00 5 0.5 2 1.02 5 0.7 3 1.04 7 0.1 4 1.06 9 0.4 x and y columns are sorted and the values not necessarily integers. z values are not sorted. Now I would like to create a matrix out of this with x as first column values and y as first row values. Matrix element a_11 shall be left NA. The a_ij should have the z value for the corresponding x and y pair. The result shall be some sort of a grid and then e.g. look like: [,1] [,2] [,3] [,4] [,5] [1,] NA 5 6 7 9 (y) [2,] 1.00 0.5 NA NA NA [3,] 1.02 0.7 NA NA NA [4,] 1.04 NA NA 0.1 NA [5,] 1.06 NA NA NA 0.4 (x) This example is just for illustration. The resulting matrix should have more numeric values than NA's. I hope I made myself clear. Any hints on how to achieve this? Is there already a function that does it? All searches I did pointed me to data type frame to matrix conversion... Kind Regards, Michael Bach
Hi r-help-bounces at r-project.org napsal dne 19.04.2011 09:46:47:> Dear R Users, > > Lets assume I have this data frame: > > x y z > 1 1.00 5 0.5 > 2 1.02 5 0.7 > 3 1.04 7 0.1 > 4 1.06 9 0.4 > > x and y columns are sorted and the values not necessarily integers. z > values are not sorted. Now I would like to create a matrix out of this > with x as first column values and y as first row values. Matrix element > a_11 shall be left NA. The a_ij should have the z value for the > corresponding x and y pair. The result shall be some sort of a grid and > then e.g. look like: > > [,1] [,2] [,3] [,4] [,5] > [1,] NA 5 6 7 9 (y) > [2,] 1.00 0.5 NA NA NA > [3,] 1.02 0.7 NA NA NA > [4,] 1.04 NA NA 0.1 NA > [5,] 1.06 NA NA NA 0.4 > (x) > > This example is just for illustration. The resulting matrix should have > more numeric values than NA's.I am not sure if this is the solution you want tab<-xtabs(z~x+y, data=df) tab[tab==0]<-NA Regards Petr> > I hope I made myself clear. Any hints on how to achieve this? Is there > already a function that does it? All searches I did pointed me to data > type frame to matrix conversion... > > Kind Regards, > Michael Bach > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guidehttp://www.R-project.org/posting-guide.html> and provide commented, minimal, self-contained, reproducible code.
On Apr 19, 2011, at 3:46 AM, Michael Bach wrote:> Dear R Users, > > Lets assume I have this data frame: > > x y z > 1 1.00 5 0.5 > 2 1.02 5 0.7 > 3 1.04 7 0.1 > 4 1.06 9 0.4 > > x and y columns are sorted and the values not necessarily integers. z > values are not sorted. Now I would like to create a matrix out of > this > with x as first column values and y as first row values. Matrix > element > a_11 shall be left NA. The a_ij should have the z value for the > corresponding x and y pair. The result shall be some sort of a grid > and > then e.g. look like: > > [,1] [,2] [,3] [,4] [,5] > [1,] NA 5 6 7 9 (y) > [2,] 1.00 0.5 NA NA NA > [3,] 1.02 0.7 NA NA NA > [4,] 1.04 NA NA 0.1 NA > [5,] 1.06 NA NA NA 0.4 > (x) > > This example is just for illustration. The resulting matrix should > have > more numeric values than NA's. > > I hope I made myself clear.Perhaps but only if the third row of your example was incorrectly constructed: > dta <- rd.txt(" x y z 1 1.00 5 0.5 2 1.02 5 0.7 3 1.04 7 0.1 4 1.06 9 0.4") #rd.txt() is a combo fn of read.table and textConnection > mat <- matrix(NA, ncol=NROW(dta)+1, nrow=NROW(dta)+1) > mat[2:NROW(mat),1] <- dta[["x"]] > mat[1,2:NROW(mat)] <- dta[["y"]] > diag(mat) <- c(NA, dta[["z"]]) > mat [,1] [,2] [,3] [,4] [,5] [1,] NA 5.0 5.0 7.0 9.0 [2,] 1.00 0.5 NA NA NA [3,] 1.02 NA 0.7 NA NA [4,] 1.04 NA NA 0.1 NA [5,] 1.06 NA NA NA 0.4> Any hints on how to achieve this? Is there > already a function that does it? All searches I did pointed me to > data > type frame to matrix conversion... >David Winsemius, MD West Hartford, CT