[R] cumsum function with data frame
Felipe Carrillo
mazatlanmexico at yahoo.com
Thu Jun 3 21:30:11 CEST 2010
Better yet, is shorter using tranform instead of summarise:
Data <- read.table(textConnection("variable Year value
EC01 2005 5
EC01 2006 10
AAO1 2005 2
AAO1 2006 4"),header=T)
ddply(Data,.(variable),transform,CUMSUM=cumsum(value))
----- Original Message ----
> From: Felipe Carrillo <mazatlanmexico at yahoo.com>
> To: Joris Meys <jorismeys at gmail.com>; "n.vialma at libero.it" <n.vialma at libero.it>
> Cc: r-help at r-project.org
> Sent: Thu, June 3, 2010 11:28:58 AM
> Subject: Re: [R] cumsum function with data frame
>
> 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 <> ymailto="mailto:jorismeys at gmail.com"
> href="mailto:jorismeys at gmail.com">jorismeys at gmail.com>
> To: "> ymailto="mailto:n.vialma at libero.it"
> href="mailto:n.vialma at libero.it">n.vialma at libero.it" <> ymailto="mailto:n.vialma at libero.it"
> href="mailto:n.vialma at libero.it">n.vialma at libero.it>
> Cc: > ymailto="mailto:r-help at r-project.org"
> href="mailto:r-help at r-project.org">r-help at 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:> href="mailto:n.vialma at libero.it">n.vialma at libero.it"
>
> href="mailto:> href="mailto:n.vialma at libero.it">n.vialma at libero.it">> ymailto="mailto:n.vialma at libero.it"
> href="mailto:n.vialma at libero.it">n.vialma at libero.it <>
> ymailto="mailto:> href="mailto:n.vialma at libero.it">n.vialma at libero.it"
>
> href="mailto:> href="mailto:n.vialma at libero.it">n.vialma at libero.it">> ymailto="mailto:n.vialma at libero.it"
> href="mailto:n.vialma at libero.it">n.vialma at 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:> ymailto="mailto:R-help at r-project.org"
> href="mailto:R-help at r-project.org">R-help at r-project.org"
>
> href="mailto:> href="mailto:R-help at r-project.org">R-help at r-project.org">> ymailto="mailto:R-help at r-project.org"
> href="mailto:R-help at r-project.org">R-help at r-project.org mailing list
>
>
> > >> 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.
>
--
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:> href="mailto:Joris.Meys at Ugent.be">Joris.Meys at Ugent.be">> ymailto="mailto:Joris.Meys at Ugent.be"
> href="mailto:Joris.Meys at Ugent.be">Joris.Meys at Ugent.be
-------------------------------
Disclaimer
>
> : http://helpdesk.ugent.be/e-maildisclaimer.php
>
> [[alternative HTML version
>
> deleted]]
______________________________________________
>
> ymailto="mailto:> href="mailto:R-help at r-project.org">R-help at r-project.org"
>
> href="mailto:> href="mailto:R-help at r-project.org">R-help at r-project.org">> ymailto="mailto:R-help at r-project.org"
> href="mailto:R-help at r-project.org">R-help at r-project.org mailing list
>
> href="> >https://stat.ethz.ch/mailman/listinfo/r-help" target=_blank
> >> 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 > >> target=_blank >http://www.R-project.org/posting-guide.html
and provide
> commented,
> minimal, self-contained, reproducible
> code.
______________________________________________
> ymailto="mailto:R-help at r-project.org"
> href="mailto:R-help at r-project.org">R-help at 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.
More information about the R-help
mailing list