[R] Merging by() results back into original data frame?

William Dunlap wdunlap at tibco.com
Tue Mar 22 00:09:30 CET 2011


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of ivo welch
> Sent: Monday, March 21, 2011 3:43 PM
> To: r-help
> Subject: [R] Merging by() results back into original data frame?
> 
> dear R experts---I am trying to figure out what the recommended way is
> to merge by() results back into the original data frame.  for example,
> I want to have a flag that tells me whether a particular row contains
> the maximum for its group.
> 
>   d <- data.frame(group=as.factor(rep(1:3,each=3)), val=rnorm(9))

ave() could do what you want without using by().  E.g.,

 > d$isGroupMax <- with(d, ave(val, group, FUN=max) == val)
 > d
   group         val isGroupMax
 1     1  0.21496662      FALSE
 2     1 -1.44767939      FALSE
 3     1  0.39635971       TRUE
 4     2  0.60235172      FALSE
 5     2  0.94581401       TRUE
 6     2  0.01665084      FALSE
 7     3 -0.58277312      FALSE
 8     3  0.82930370      FALSE
 9     3  1.02906920       TRUE

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com  

>   highestvals <- by( d, d$group, function(d)(max(d$val)) )
> 
>   ## and now?  iterate over levels( d$group ) ?  how do I merge
> highestvals back into d?
> 
> advice appreciated.
> 
> sincerely,
> 
> /iaw
> ----
> Ivo Welch (ivo.welch at brown.edu, ivo.welch at gmail.com)
> 
> ______________________________________________
> 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