Have you tried using ave()? group <- rep(1:5,each=5) variable <- log(1:25) d <- data.frame(group, variable) d$scaled <- d$variable/with(d, ave(variable, group, FUN=max))
Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] On Behalf Of Seth W Bigelow > Sent: Tuesday, September 21, 2010 8:43 AM > To: bill.venab...@csiro.au > Cc: r-help@r-project.org > Subject: Re: [R] Doing operations by grouping variable > > Thanks, Bill and Michael, you have answered the question I > asked, but not > the one I wished to ask > I want to obtain the maximum in each group of variables, so I > could scale > each variable by the maximum for its group. If I use tapply, > as in the > example below, there's a mismatch in dimensions of the output > of tapply > [5] and the data frame with the variables[25]. > > > group = rep(1:5, each=5) # define grouping variable > > variable = rnorm(25) > # > generate data > > d <- data.frame(group,variable) > # > bundle together in a data frame > > d$scaled <- d$variable/(with(d,tapply(variable,group,max))) > # > crash and burn > > > > > > Dr. Seth W. Bigelow > Biologist, USDA-FS Pacific Southwest Research Station > 1731 Research Park Drive, Davis California > > > > > <bill.venab...@csiro.au> > 09/20/2010 06:24 PM > > To > <michael.bedw...@gmail.com>, <sbige...@fs.fed.us>, > <r-help@r-project.org> > cc > > Subject > RE: [R] Doing operations by grouping variable > > > > > > > That's if the variables are visible. If they are only in the > data frame > it's not much more difficult > > d <- data.frame(group = rep(1:5, each=5), > variable = rnorm(25)) > with(d, tapply(variable, group, max)) > > > (Tip: avoid using attach().) > > Bill Venables. > > -----Original Message----- > From: r-help-boun...@r-project.org > [mailto:r-help-boun...@r-project.org] > On Behalf Of Michael Bedward > Sent: Tuesday, 21 September 2010 11:15 AM > To: Seth W Bigelow; Rhelp > Subject: Re: [R] Doing operations by grouping variable > > Not sure why you think tapply is "awkward". Your example would be... > > group <- rep(1:5, each=5) > variable <- rnorm(25) > tapply(variable, group, max) > > ...which looks quite elegant to me :) > > Meanwhile, the reason your expression doesn't work is that you are > asking mistakenly for elements 1:5 repeatedly from the variable col. > If you just type d$variable[ d$group ] and compare the values to your > variable vector this should be clear. > > Michael > > On 21 September 2010 10:59, Seth W Bigelow <sbige...@fs.fed.us> wrote: > > I'm writing an expression that requires searching a vector > according to > > group. As an example, I want to find the maximum value in each of 5 > > groups. > > > > > > group=rep(1:5, each=5) # create grouping > variable > > > > variable=rnorm(25) # generate data > > > > d <- data.frame(group,variable) # make data > frame > > > > max(d$variable[d$group]) # try > expression that > > doesn't work > > > > I'm expecting a vector containing the maximum variable > value, per group. > > What am I doing wrong? I know I can use aggregate, tapply, > etc. but that > > seems awkward and bulky, is there a simpler way? > > > > > > Dr. Seth W. Bigelow > > Biologist, USDA-FS Pacific Southwest Research Station > > 1731 Research Park Drive, Davis California > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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. > > > > ______________________________________________ > 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. > > > [[alternative HTML version deleted]] > > ______________________________________________ > 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. > ______________________________________________ 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.