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, n.vialma@libero.it
<n.vialma@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]]
>
> ______________________________________________
> 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
Joris.Meys@Ugent.be
-------------------------------
Disclaimer : http://helpdesk.ugent.be/e-maildisclaimer.php
[[alternative HTML version deleted]]