How about something like this:

> x
   id      data
1   1 0.7773207
2   3 0.9606180
3   2 0.4346595
4   3 0.7125147
5   2 0.3999944
6   2 0.3253522
7   2 0.7570871
8   3 0.2026923
9   3 0.7111212
10  2 0.1216919
> # compute running sum for each ID
> x$run <- ave(x$data, x$id, FUN=cumsum)
> x
   id      data       run
1   1 0.7773207 0.7773207
2   3 0.9606180 0.9606180
3   2 0.4346595 0.4346595
4   3 0.7125147 1.6731327
5   2 0.3999944 0.8346539
6   2 0.3253522 1.1600060
7   2 0.7570871 1.9170932
8   3 0.2026923 1.8758249
9   3 0.7111212 2.5869462
10  2 0.1216919 2.0387851
>


On Wed, Jun 24, 2009 at 12:08 PM, David Hugh-Jones <davidhughjones@gmail.com
> wrote:

> Hello all
>
> I have a big data frame and I regularly want to break it down into subsets,
> calculate some new data, and add it back to the data frame.
>
> At the moment my technique seems a bit ugly and embarrassing. Something
> like:
>
> result <- by(mydata, mydata$some_factor, function (x) {
>  # do something to create a vector v with length(v) == nrow(x)
>  return(v)
> })
> # now result has a big list, argh... how do I put it neatly back into the
> mydata data frame?
> for (i in unique(mydata$some_factor) {
> mydata$newvar[mydata$somefactor ==i] <- result[[i]]
> }
>
> What should I be doing instead of this?
>
> David Hugh-Jones
> Post-doctoral Researcher
> Max Planck Institute of Economics, Jena
> http://davidhughjones.googlepages.com
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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<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 that you are trying to solve?

	[[alternative HTML version deleted]]


