Try this:

> a
  x y z
1 1 1 1
2 2 2 2
3 1 1 3
4 4 4 4
5 3 3 5
> # create indices of groups
> indices <- split(seq(nrow(a)), list(a$x, a$y), drop=TRUE)
> combine <- lapply(indices, function(.ind){
+     # create a row representing the max of z
+     c(x=a$x[.ind[1]], y=a$y[.ind[1]], z=max(a$z[.ind]))
+ })
> do.call('rbind', combine)  # put back into a matrix
    x y z
1.1 1 1 3
2.2 2 2 2
3.3 3 3 5
4.4 4 4 4
>



On 3/31/07, Deepak Manohar <deepakmanohar@gmail.com> wrote:
>
> Hi team,
>   I have the data of the form:
>
> > a<- data.frame(x=c(1,2,1,4,3), y=c(1,2,1,4,3), z=c(1,2,3,4,5))
>
> I need the output of the form
>
> > b<- data.frame(x=c(1,2,3,4), y=c(1,2,3,4), z=(3,2,5,4) )
>
> As you can see, the Z value contains the maximum for each of the (x,y)
> combinations.
>
> I used
> > c<-by(a$z, list(x=a$x, y=a$y), max)
> > c[,]
>   y
> x    1  2  3  4
> 1  3 NA NA NA
> 2 NA  2 NA NA
> 3 NA NA  5 NA
> 4 NA NA NA  4
>
> Not sure If I have any standard function to convert this to the data
> frame that I need. Can you help me convert the last array into the
> data frame? If there is any other way apart from using the "by"
> function, please inform me regarding that as well.
>
> -- Deepak Manohar T
>
> ______________________________________________
> R-help@stat.math.ethz.ch 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?

	[[alternative HTML version deleted]]

