Thank you gentlemen, all three solutions are working and very insightful.
Your help and time is very much appreciated. Alexander On Tue, Mar 2, 2010 at 1:08 PM, Felipe Carrillo <mazatlanmex...@yahoo.com>wrote: > Like this? > > group<- c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3) > var2<- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) > data<-data.frame(group, var2) > data > ddply(data,"group",transform,ID=1:length(group)) > > Felipe D. Carrillo > Supervisory Fishery Biologist > Department of the Interior > US Fish & Wildlife Service > California, USA > > > > ----- Original Message ---- > > From: Alexander Schwall <alexander.schw...@gmail.com> > > To: r-help@r-project.org > > Sent: Tue, March 2, 2010 9:53:19 AM > > Subject: [R] adding row ID numbers by group > > > > Hello R community, > > I am hoping for some help with the following > > problem. > > I have a data frame containing various groups. These groups are > > identified > by a grouping variable. I would like to add a sequential ID number > > to each > group to later sort these individuals within each group by this ID > > number. > > Here is what the final result should look like: > > ID > > group var2 > 1 1 1 > 2 > > 1 2 > 3 1 3 > 4 > > 1 4 > 1 2 5 > 2 > > 2 6 > 3 2 > > 7 > 4 2 8 > 5 2 > > 9 > 1 3 10 > 2 3 > > 11 > 3 3 12 > 4 3 > > 13 > 5 3 14 > > > I have created the following > > code to loop through this and compare a given > row with the following row for > > the grouping variable. If a given row would > be different from the then > > following row, the ID number would be reset and I > would start counting up > > again. The problem that I am encountering that at > the bottom of the data > > frame the if statement runs out of a condition > against which to compare the > > last row. > > Here is what I did: > > group<- > > c(1,1,1,1,2,2,2,2,2,3,3,3,3,3,3) > var2<- > > c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) > > data<-data.frame(group, > > var2) > data > > #IDN is the desired ID number by group > IDN > > <-numeric(length(test$var2)) > IDN > > > for (i in > > 1:(length(data$group))) { > if(data[i,1] < > > (length(data$group))){ > if(data[i,1] == > > data[i+1,1]){ > IDN[i]<- > > sum(IDN[i-1],1)} > else{ > > > IDN[i]<- -55} #for now an arbitrary > > value > } > if(data[i,1] == > > (length(data$group))) { > IDN[i] <- 99 > > #for now an arbitrary value > } > > > } > > IDN > > > > Is there maybe an easier way to do this? Any > > thoughts would be very > appreciated since I am running out of > > ideas. > > Thanks > Alexander > > [[alternative HTML > > version deleted]] > > ______________________________________________ > > ymailto="mailto:R-help@r-project.org" > > href="mailto:R-help@r-project.org">R-help@r-project.org mailing list > > href="https://stat.ethz.ch/mailman/listinfo/r-help" target=_blank > > >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.