Message-ID: <3ED8D123.6070700@statistik.uni-dortmund.de>
Date: 2003-05-31T15:58:27Z
From: Uwe Ligges
Subject: function to populate a matrix based on a lookup to another matrix ?
In-Reply-To: <Law11-F1233JkrKdMUP00061c0d@hotmail.com>
peter leonard wrote:
> Hi,
>
> This is a beginner R question.
>
> I have a 4x4 matrix named 'lookup' with the following values:
>
> 1 2 3 4
> 1 0.000000 2.828427 5.656854 8.485281
> 2 2.828427 0.000000 2.828427 5.656854
> 3 5.656854 2.828427 0.000000 2.828427
> 4 8.485281 5.656854 2.828427 0.000000
>
> I then create a new empty matrix named 'dd' with specfic row and col
> names :
>
> 1 3 4 3 3 1
> 1 NA NA NA NA NA NA
> 2 NA NA NA NA NA NA
> 3 NA NA NA NA NA NA
> 4 NA NA NA NA NA NA
> 3 NA NA NA NA NA NA
> 2 NA NA NA NA NA NA
> 1 NA NA NA NA NA NA
>
> I want to be able populate the cells in 'dd' using 'lookup' based on the
> specified rownames and colnames of 'dd'. For example, the cell in 'dd'
> where the rowname =2 and the colname = 1 should be assigned the value
> 2.828427 .
>
> I've tried several ways of doing this with the apply function but
> without success. I can do it with a for loop but I want to avoid that
> for efficiency reasons.
>
> After running the function, as an example, the first column of 'dd'
> should look like this :
>
> 1
> 1 0.000000000
> 2 2.828427125
> 3 5.656854249
> 4 8.485281374
> 3 5.656854249
> 2 2.828427125
> 1 0.000000000
>
> Can anyone please help me identify the required function or an
> alternative way of achieving the same result? Hopefully this is simple
> and I'm just not seeing it.
>
> Thanks
> Peter
>
dd <- lookup[as.numeric(rownames(dd)), as.numeric(colnames(dd))]
and after that restoring dd's row- and colnames.
Anyway, I guess you don't need to create "dd". Just calculate those
rownames (rn) and colnames (cn) as integers. Then the following works:
dd <- lookup[rn, cn]
Uwe Ligges