You can also use ddply from the plyr package: library(plyr) Data <- read.table(textConnection("variable Year value EC01 2005 5 EC01 2006 10 AAO1 2005 2 AAO1 2006 4"),header=T) Data ddply(Data,.(variable),summarise,Year=Year,value=value,CUMSUM=cumsum(value)) Felipe D. Carrillo Supervisory Fishery Biologist Department of the Interior US Fish & Wildlife Service California, USA
----- Original Message ---- > From: Joris Meys <jorism...@gmail.com> > To: "n.via...@libero.it" <n.via...@libero.it> > Cc: r-help@r-project.org > Sent: Thu, June 3, 2010 9:26:17 AM > Subject: Re: [R] cumsum function with data frame > > See ?split and ?unsplit. Data <- > read.table(textConnection("variable Year > value EC01 2005 > 5 EC01 2006 > 10 AAO1 > 2005 2 AAO1 > 2006 4"),header=T) Datalist > <-split(Data,Data$variable) resultlist <- > lapply(Datalist,function(x){ x$cumul <- > cumsum(x$value) return(x) }) result <- > unsplit(resultlist,Data$variable) result variable Year value > cumul 1 EC01 2005 5 5 2 > EC01 2006 10 15 3 AAO1 > 2005 2 2 4 AAO1 2006 > 4 6 On a side note: I've used this construction now for a > number of problems. Some could be better solved using more specific functions > (e.g. ave() for adding a column with means for example). I'm not sure however > this is the most optimal approach to applying a function to subsets of a > dataframe and adding the result of that function as an extra variable. > Anybody care to elaborate on how the R masters had it in > mind? Cheers Joris On Thu, Jun 3, 2010 at 5:58 PM, > ymailto="mailto:n.via...@libero.it" > href="mailto:n.via...@libero.it">n.via...@libero.it <> > ymailto="mailto:n.via...@libero.it" > href="mailto:n.via...@libero.it">n.via...@libero.it>wrote: > > > Dear list, > I have a problem with the cumsum function. > I have a > data frame like the following one > variable > Year value > EC01 > 2005 5 > > EC01 > 2006 10 > > > AAO1 2005 > 2 > > AAO1 2006 > 4 > what I would like to obtain is > > variable Year value > cumsum > > > EC01 > 2005 5 > 5 > > > EC01 > 2006 10 > 15 > > > AAO1 > 2005 2 > 2 > > > AAO1 > 2006 4 > 6 > > > if I use the by function or the aggregate > function the result is a list or > something else, what I want is a data > frame as I showed above... > anyone knows how to get it??? > THANKS > A LOT > > > > > > > [[alternative HTML version deleted]] > > > ______________________________________________ > > ymailto="mailto:R-help@r-project.org" > href="mailto:R-help@r-project.org">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. > -- Joris Meys Statistical > Consultant Ghent University Faculty of Bioscience > Engineering Department of Applied mathematics, biometrics and process > control Coupure Links 653 B-9000 Gent tel : +32 9 264 59 > 87 > href="mailto:joris.m...@ugent.be">joris.m...@ugent.be ------------------------------- Disclaimer > : http://helpdesk.ugent.be/e-maildisclaimer.php > [[alternative HTML version > deleted]] ______________________________________________ > ymailto="mailto:R-help@r-project.org" > href="mailto:R-help@r-project.org">R-help@r-project.org mailing list > href="https://stat.ethz.ch/mailman/listinfo/r-help" target=_blank > >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-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.