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
Have a look at function ave(), e.g.,
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)
df$edf <- with(df, ave(Value, Group, FUN = edf))
df
I hope it helps.
Best
On 08/17/2011 11:51 AM, Marius Hofert 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=
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 <-
> 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
De
ounces@r-
>> project.org] On Behalf Of Marius Hofert
>> Sent: woensdag 17 augustus 2011 12:42
>> To: Help R
>> Subject: [R] How to apply a function to subsets of a data frame *and*
>> obtain a data frame again?
>>
>> Dear all,
>>
>> First, let'
ilto:r-help-bounces@r-
> project.org] On Behalf Of Marius Hofert
> Sent: woensdag 17 augustus 2011 12:42
> To: Help R
> Subject: [R] How to apply a function to subsets of a data frame *and*
> obtain a data frame again?
>
> Dear all,
>
> First, let's create some data
Dear all,
First, let's create some data to play around:
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),])
## Now we need the empirical distribution function:
edf <- function(x) e
8 matches
Mail list logo