[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