[R] How to apply a function to subsets of a data frame *and* obtain a data frame again?

Marius Hofert m_hofert at web.de
Wed Aug 17 13:51:31 CEST 2011


Dear all, 

thanks a lot for the quick help. 
Below is what I built with the hint of Nick.

Cheers,

Marius


library(plyr)

set.seed(1)
(df <- data.frame(Group=rep(c("Group1","Group2","Group3"), each=10), 
                Value=c(rexp(10, 1), rexp(10, 4), rexp(10, 10)))[sample(1:30,30),])
edf <- function(x) ecdf(x)(x) 

ddply(df, .(Group), function(df.) cbind(df., edf=edf(df.$Value))) 


On 2011-08-17, at 13:38 , Hadley Wickham wrote:

>> The following example does what you want using ddply:
>> 
>> library(plyr)
>> edfPerGroup = ddply(df, .(Group), summarise, edf = edf(Value), Value =
>> Value)
> 
> Or slightly more succinctly:
> 
> ddply(df, .(Group), mutate, edf = edf(Value))
> 
> Hadley
> 
> -- 
> Assistant Professor / Dobelman Family Junior Chair
> Department of Statistics / Rice University
> http://had.co.nz/



More information about the R-help mailing list