Re: [R] Matrix/dataframe indexing

2007-03-06 Thread Marc Schwartz
On Mon, 2007-03-05 at 12:49 -0500, Guenther, Cameron wrote: 
 Hi all, 
 I am hoping someone can help me out with this:
 
 If I have dataframe of years and ages and the first column and first row
 are filled with leading values:
 
 Df-  age1age2age3
   Yr1 1   0.4 0.16
   Yr2 1.5 0   0
   Yr3 0.9 0   0
   Yr4 1   0   0   
   Yr5 1.2 0   0
   Yr6 1.4 0   0
   Yr7 0.8 0   0
   Yr8 0.6 0   0
   Yr9 1.1 0   0
 
 Now the rest of the cells need to be filled according to the previous
 year and age cell so arbitrarily, cell [2,2] should be value in cell
 [1,1] * exp(0.3), and cell [2,3] should be the value in cell [1,2]*
 exp(0.3), etc.
 
 How do I write the for loop so that it will calculate the missing cell
 values over both dimensions of the dataframe?
 
 Thanks in advance 

Cameron,

I have not seen a reply to this, but one of the problems that you can
run into is that, depending upon the approach, you can execute the
manipulation on the second column, in effect, before the first column in
the actual source matrix has been updated, due to object subsetting and
copying. 

So, my knee jerk reaction here is to simply do this in two lines of
code, one on the first column and then a separate line for the second
column. I think that this is what you want as an end result:

 DF
age1 age2 age3
Yr1  1.0  0.4 0.16
Yr2  1.5  0.0 0.00
Yr3  0.9  0.0 0.00
Yr4  1.0  0.0 0.00
Yr5  1.2  0.0 0.00
Yr6  1.4  0.0 0.00
Yr7  0.8  0.0 0.00
Yr8  0.6  0.0 0.00
Yr9  1.1  0.0 0.00


DF[-1, 2] - DF[-9, 1] * exp(0.3)

 DF
age1  age2 age3
Yr1  1.0 0.400 0.16
Yr2  1.5 1.3498588 0.00
Yr3  0.9 2.0247882 0.00
Yr4  1.0 1.2148729 0.00
Yr5  1.2 1.3498588 0.00
Yr6  1.4 1.6198306 0.00
Yr7  0.8 1.8898023 0.00
Yr8  0.6 1.0798870 0.00
Yr9  1.1 0.8099153 0.00


DF[-1, 3] - DF[-9, 2] * exp(0.3)

 DF
age1  age2  age3
Yr1  1.0 0.400 0.160
Yr2  1.5 1.3498588 0.5399435
Yr3  0.9 2.0247882 1.8221188
Yr4  1.0 1.2148729 2.7331782
Yr5  1.2 1.3498588 1.6399069
Yr6  1.4 1.6198306 1.8221188
Yr7  0.8 1.8898023 2.1865426
Yr8  0.6 1.0798870 2.5509663
Yr9  1.1 0.8099153 1.4576950


I think that the risk inherent in R sometimes is that there can be a
tendency to 'overthink' a problem in either trying to vectorize a
function or in trying to create (or avoid) a loop, when individual code
statements can just get the job done quickly and simply, and in many
cases be more 'readable'.

If this was something where you were going to do this repeatedly and
needed to create a function to generalize the approach to matrices where
the dimensions are not known a priori, then it might be worthwhile to
encapsulate the above in a function where dims can be checked, etc.

HTH,

Marc Schwartz

__
R-help@stat.math.ethz.ch 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.


[R] Matrix/dataframe indexing

2007-03-05 Thread Guenther, Cameron
Hi all, 
I am hoping someone can help me out with this:

If I have dataframe of years and ages and the first column and first row
are filled with leading values:

Df-age1age2age3
Yr1 1   0.4 0.16
  Yr2   1.5 0   0
Yr3 0.9 0   0
Yr4 1   0   0   
Yr5 1.2 0   0
Yr6 1.4 0   0
Yr7 0.8 0   0
Yr8 0.6 0   0
Yr9 1.1 0   0

Now the rest of the cells need to be filled according to the previous
year and age cell so arbitrarily, cell [2,2] should be value in cell
[1,1] * exp(0.3), and cell [2,3] should be the value in cell [1,2]*
exp(0.3), etc.

How do I write the for loop so that it will calculate the missing cell
values over both dimensions of the dataframe?

Thanks in advance   

Cameron Guenther, Ph.D.
100 8th Ave. SE
St. Petersburg, Fl 33701
727-896-8626 ext. 4305
[EMAIL PROTECTED] 
__
R-help@stat.math.ethz.ch 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.