David Winsemius <dwinsem...@comcast.net> writes:

> On Apr 19, 2011, at 8:16 AM, Michael Bach wrote:
>
>> David Winsemius <dwinsem...@comcast.net> writes:
>>
>>> 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
>>>
>>>
>>
>> Thanks for your answer David,
>>
>> but this yields a diagonal matrix only.  I think I did not make myself
>> clear enough.  In the original 3 column data frame, there could have
>> been a pair of x and y with identical y's but different x's and z's.
>> The way my data source is derived, there is a guarantee that there is
>> are no two rows with identical x and y in the original data frame.  In
>> the end, x and y serve as a grid, with z values at each point in the
>> grid or NA's if there is no z value for a x and y pair.  The number of
>> rows in the data frame is then equal to the number of non-NA values in
>> the resulting matrix.
>>
>> Another try, lets assume this original data frame:
>>
>>  x  y z
>> 1 2  5 1
>> 2 2  6 1
>> 3 3  7 1
>> 4 3  8 1
>> 5 3  9 1
>> 6 5 10 2
>> 7 5 11 2
>> 8 5 12 2
>>
>> Then I would like to get
>>
>>     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
>> [1,]   NA    5    6    7    8    9   10   11   12
>> [2,]    2    1    1
>> [3,]    2
>> [4,]    3              1    1    1
>> [5,]    3
>> [6,]    3
>> [7,]    5                             2    2    2
>> [8,]    5
>> [9,]    5
>>
>> I left out all the NA's, except the first, where there is no z value,
>> say e.g. x=5 and y=8.
>>
>> Do you see what I mean?
>
> I do, ... now anyway. Your earlier data example had non-integer x and y 
> values which made
> what I will now offer infeasible (or at the very  least ambiguous). Indexing 
> with decimal
> numbers does not provoke an  error and that the truncated value is used.  
> With integer
> indices you  can use a two column matrix as an argument to "["
>
>> mat <- matrix(NA, nrow=max(dta[[1]])+1, ncol=max(dta[[2]])+1 )
>> mat[data.matrix(dta[,1:2])] <- dta[,3]
>> mat
>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
> [1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> [2,]   NA   NA   NA   NA    1    1   NA   NA   NA    NA    NA    NA
> [3,]   NA   NA   NA   NA   NA   NA    1    1    1    NA    NA    NA
> [4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
> [5,]   NA   NA   NA   NA   NA   NA   NA   NA   NA     2     2     2
> [6,]   NA   NA   NA   NA   NA   NA   NA   NA   NA    NA    NA    NA
>      [,13]
> [1,]    NA
> [2,]    NA
> [3,]    NA
> [4,]    NA
> [5,]    NA
> [6,]    NA
>
> I leave the insertion of the first row and columns and removal of the extra 
> columns
> induced by the mismatch of the values and row numbers to  you, since .....
>> mat[, 4:12]
>      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
> [1,]   NA   NA   NA   NA   NA   NA   NA   NA   NA
> [2,]   NA    1    1   NA   NA   NA   NA   NA   NA
> [3,]   NA   NA   NA    1    1    1   NA   NA   NA
> [4,]   NA   NA   NA   NA   NA   NA   NA   NA   NA
> [5,]   NA   NA   NA   NA   NA   NA    2    2    2
> [6,]   NA   NA   NA   NA   NA   NA   NA   NA   NA
>
> --
>
> David Winsemius, MD
> West Hartford, CT

Thanks for your tips and advice!

I will see what I can work out alone from here on...

______________________________________________
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.

Reply via email to