Thanks A.K. But I have "NA" in ID column, so when I apply the code, it gives me error saying the replacement as less rows than the data has. Anyway for ID=N/A, return sth like "N/A_1" in order as well?
On Tue, May 7, 2013 at 11:17 AM, arun <smartpink...@yahoo.com> wrote: > H, > Sorry, a mistake: > dat1$UniqueID<-unlist(lapply(split(dat1,dat1$ID),function(x) > with(x,as.character(interaction(ID,seq_len(nrow(x)),sep="_")))),use.names=FALSE) > dat1 > # ObsNumber ID Weight UniqueID > #1 1 0001 12 0001_1 > #2 2 0001 13 0001_2 > #3 3 0001 14 0001_3 > #4 4 0002 16 0002_1 > #5 5 0002 17 0002_2 > > dat2$UniqueID<-unlist(lapply(split(dat2,dat2$ID),function(x) > with(x,as.character(interaction(ID,seq_len(nrow(x)),sep="_")))),use.names=FALSE) > A.K. > > > > > > ----- Original Message ----- > From: arun <smartpink...@yahoo.com> > To: Ye Lin <ye...@lbl.gov> > Cc: R help <r-help@r-project.org> > Sent: Tuesday, May 7, 2013 2:10 PM > Subject: Re: [R] create unique ID for each group > > > > Hi, > > Try this: > dat1<- read.table(text=" > ObsNumber ID Weight > 1 0001 12 > 2 0001 13 > 3 0001 14 > 4 0002 16 > 5 0002 17 > ",sep="",header=TRUE,colClass=c("numeric","character","numeric")) > dat2<- read.table(text=" > ID Height > 0001 3.2 > 0001 2.6 > 0001 3.2 > 0002 2.2 > 0002 2.6 > ",sep="",header=TRUE,colClass=c("character","numeric")) > dat1$UniqueID<-with(dat1,as.character(interaction(ID,ObsNumber,sep="_"))) > > > dat2$UniqueID<-with(dat2,as.character(interaction(ID,rownames(dat2),sep="_"))) > dat2 > # ID Height UniqueID > #1 0001 3.2 0001_1 > #2 0001 2.6 0001_2 > #3 0001 3.2 0001_3 > #4 0002 2.2 0002_4 > #5 0002 2.6 0002_5 > A.K. > > > > ----- Original Message ----- > From: Ye Lin <ye...@lbl.gov> > To: R help <r-help@r-project.org> > Cc: > Sent: Tuesday, May 7, 2013 1:54 PM > Subject: [R] create unique ID for each group > > Hey All, > > I have a dataset(dat1) like this: > > ObsNumber ID Weight > 1 0001 12 > 2 0001 13 > 3 0001 14 > 4 0002 16 > 5 0002 17 > > And another dataset(dat2) like this: > > ID Height > 0001 3.2 > 0001 2.6 > 0001 3.2 > 0002 2.2 > 0002 2.6 > > I want to merge dat1 and dat2 based on "ID" in order, I know "match" only > returns the first match it finds. So I am thinking create unique ID col in > dat2 and dat2, then merge. But I dont know how to do that so it can be like > this: > > dat1: > > ObsNumber ID Weight UniqueID > 1 0001 12 0001_1 > 2 0001 13 0001_2 > 3 0001 14 0001_3 > 4 0002 16 0002_1 > 5 0002 17 0002_1 > > dat2: > > ID Height UniqueID > 0001 3.2 0001_1 > 0001 2.6 0001_2 > 0001 3.2 0001_3 > 0002 2.2 0002_1 > 0002 2.6 0002_2 > > Or if it is possible to merge dat1 and dat2 by matching "ID" but return the > match in order that would be great! > > Thanks for your help! > > [[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. > > [[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.