Hi again, Thanks a lot for all the suggestions. It will take me a little bit to wrap my head around to understand what is what, though! This will help me quite a bit. One difference in the result output between you're solution and Mark's solution is this: loc sp tot L1 L1 b 60 L2.5 L2 d 25 L2.7 L2 e 25 L3 L3 b 68
And Mark's solution: loc sp tot L1 L1 b 60 L2 L2 d,e 25 L3 L3 b 68 I will probably use both type of solutions depending what else i need to do with the data. Thank you all for your help, Monica ---------------------------------------- > Date: Thu, 12 Feb 2009 14:05:44 -0800 > From: spec...@stat.berkeley.edu > To: pisican...@hotmail.com > CC: christos.hat...@nuverabio.com; r-help@r-project.org; markle...@verizon.net > Subject: Re: [R] Aggregrate function > > Monica - > Here's a more compact version of the same idea: > > do.call(rbind,by(xveg,xveg['loc'],function(x)x[x$tot == max(x$tot),])) > > - Phil Spector > Statistical Computing Facility > Department of Statistics > UC Berkeley > spec...@stat.berkeley.edu > > > On Thu, 12 Feb 2009, Monica Pisica wrote: > >> >> Hi, >> >> Thanks for the solution. Mark Leeds sent me privately a very similar >> solution. My next question to him was: >> >> Suppose that for a certain location 2 species have the same maximum total >> ... (there are ties in the data for a particular location). How do i get all >> species that have that max. total?? >> >> For this case i have changed the tot as follows: >> >> tot <- c(20, 60, 40, 15, 25, 15, 25, 20, 68, 32) >> >> His sollution is (and does work): >> >> temp <- lapply(split(xveg,loc), function(.df) { >> maxindices <- which(.df$tot == .df$tot[which.max(.df$tot)]) >> data.frame(loc=.df$loc[1],sp=paste(.df$sp[maxindices],collapse=","),tot=max(.df$tot)) >> }) >> >> result <- do.call(rbind,temp) >> print(result) >> >> Thanks so much again, >> >> Monica >> >> >> >>> From: christos.hat...@nuverabio.com >>> To: pisican...@hotmail.com; r-help@r-project.org >>> Subject: RE: [R] Aggregrate function >>> Date: Thu, 12 Feb 2009 15:56:38 -0500 >>> >>> I don't have an easy solution with aggregate, because the function in >>> aggregate needs to return a scalar. >>> But the following should work: >>> >>> do.call("rbind", lapply(split(xveg, xveg$loc), function(x) >>> x[which.max(x$tot), ])) >>> >>> loc sp tot >>> L1 L1 b 60 >>> L2 L2 e 30 >>> L3 L3 b 68 >>> >>> -Christos >>> >>>> -----Original Message----- >>>> From: r-help-boun...@r-project.org >>>> [mailto:r-help-boun...@r-project.org] On Behalf Of Monica Pisica >>>> Sent: Thursday, February 12, 2009 1:58 PM >>>> To: R help project >>>> Subject: [R] Aggregrate function >>>> >>>> >>>> Hi, >>>> >>>> I have to recognize that i don't fully understand the >>>> aggregate function, but i think it should help me with what i >>>> want to do. >>>> >>>> xveg is a data.frame with location, species, and total for >>>> the species. Each location is repeated, once for every >>>> species present at that location. For each location i want to >>>> find out which species has the maximum total ... so i've >>>> tried different ways to do it using aggregate. >>>> >>>> loc <- c(rep("L1", 3), rep("L2", 5), rep("L3", 2)) sp <- >>>> c("a", "b", "c", "a", "d", "b", "e", "c", "b", "d") tot <- >>>> c(20, 60, 40, 15, 25, 10, 30, 20, 68, 32) xveg <- >>>> data.frame(loc, sp, tot) >>>> >>>> result desired: >>>> >>>> L1 b >>>> L2 e >>>> L3 b >>>> >>>> sp_maj <- aggregate(xveg[,2], list(xveg[,1], function(x) >>>> levels(x)[which.max(table(x))]) >>>> >>>> This is wrong because it gives the first species name in each >>>> level of location, so i get a, a, b, as species instead of b, e, b. >>>> >>>> I've tried other few aggregate commands, all with wrong results. >>>> >>>> I will appreciate any help, >>>> >>>> Thanks, >>>> >>>> Monica >>>> >>>> _________________________________________________________________ >>>> >>>> the go. >>>> >>>> ______________________________________________ >>>> R-help@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. >>>> >>>> >>> >>> >> _________________________________________________________________ >> >> of your life. >> >> ______________________________________________ >> R-help@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. >> _________________________________________________________________ . 50F681DAD532637!5295.entry?ocid=TXT_TAGLM_WL_domore_092008 ______________________________________________ R-help@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.