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