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

Dennis Murphy djmuser at gmail.com
Wed Aug 17 20:44:18 CEST 2011


Hi:

I would agree with Paul Hiemstra about using Hadley's code instead;
see ?plyr:::mutate for details. It would also make sense to sort the
data and edf by group - this does it in one line:

arrange(ddply(df, .(Group), mutate, edf = edf(Value)), Group, edf)

HTH,
Dennis

On Wed, Aug 17, 2011 at 4:51 AM, Marius Hofert <m_hofert at web.de> wrote:
> 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/
>
> ______________________________________________
> R-help at 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.
>



More information about the R-help mailing list