[R] Data manipulation in columns (with apply?)

jim holtman jholtman at gmail.com
Wed Oct 11 01:40:05 CEST 2006


Does this start to do what you want?

> x <- "NUM sim N
+ 1 1  466
+ 1 2  450
+ 1 3  473
+ 1 4  531
+ 1 5  515
+ 1 6  502
+ 1 7  471
+ 1 8  460
+ 1 9  458
+ 1 10 434
+ 2 1  289
+ 2 2  356
+ 2 3 387
+ 2 4 440
+ 2 5 457
+ 2 6 466
+ 2 7 467
+ 2 8 449
+ 2 9 387
+ 2 10 394
+ 3 1 367
+ 3 2 400
+ 3 3 476
+ 3 4 508
+ 3 5 478
+ 3 6 501
+ 3 7 513
+ 3 8 505
+ 3 9 492
+ 3 10 465"
> a <- read.table(textConnection(x), header=T)
> lambda <- by(a, a$NUM, function(x) x$N[-1] / x$N[-length(x$N)])
> lambda
a$NUM: 1
[1] 0.9656652 1.0511111 1.1226216 0.9698682 0.9747573 0.9382470
0.9766454 0.9956522 0.9475983
------------------------------------------------------------------------------
a$NUM: 2
[1] 1.2318339 1.0870787 1.1369509 1.0386364 1.0196937 1.0021459
0.9614561 0.8619154 1.0180879
------------------------------------------------------------------------------
a$NUM: 3
[1] 1.0899183 1.1900000 1.0672269 0.9409449 1.0481172 1.0239521
0.9844055 0.9742574 0.9451220
> # sum of lambdas
> sapply(lambda, sum)
       1        2        3
8.942166 9.357799 9.263944
> # mean
> sapply(lambda, mean)
       1        2        3
0.993574 1.039755 1.029327
> # sd
> sapply(lambda, sd)
         1          2          3
0.05822850 0.10525335 0.08004527
>
>
>


On 10/10/06, Bret Collier <bret at tamu.edu> wrote:
> R Users,
> I have written a small simulation model in R which outputs a datafile consisting of ending population sizes for each simulation run (year).  The data (see short data example below) is labeled by NUM (simulation run), sim (year) and N (yearly count).   After searching the help files and coming up empty (probably because I used the wrong terms) I am appealing for some help for working with the output dataset.
>
> What I want to do is for each of the i simulation runs (NUM) I want to
>
> 1) take N(t+1)/N(t)=lambda(t) for each year (where in the below example t=1,...,10--total years of the simulation)
> 2) Sum lambda(t) and divide by t (e.g., output both the mean/se of lambda for each simulation run)
> 3) Take the mean of the mean(lambda's) (and associated stddev, min, max) over all NUM
>
> I think I have to write a function for use within an apply statement, but I am not quite there yet on the learning curve so most of my recent attempts in R have been useful learning experiences of what not to do...
>
> Any suggestions/direction is greatly appreciated.
>
> Bret Collier
> TX A&M
>
> NUM sim N
> 1 1  466
> 1 2  450
> 1 3  473
> 1 4  531
> 1 5  515
> 1 6  502
> 1 7  471
> 1 8  460
> 1 9  458
> 1 10 434
> 2 1  289
> 2 2  356
> 2 3 387
> 2 4 440
> 2 5 457
> 2 6 466
> 2 7 467
> 2 8 449
> 2 9 387
> 2 10 394
> 3 1 367
> 3 2 400
> 3 3 476
> 3 4 508
> 3 5 478
> 3 6 501
> 3 7 513
> 3 8 505
> 3 9 492
> 3 10 465
>
> platform       i386-pc-mingw32
> arch           i386
> os             mingw32
> system         i386, mingw32
> status
> major          2
> minor          3.0
> year           2006
> month          04
> day            24
> svn rev        37909
> language       R
> version.string Version 2.3.0 (2006-04-24) (yeah, I need to update)
>
> ______________________________________________
> R-help at 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.
>


-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?



More information about the R-help mailing list