R help..subsetting data frame that meeting multiple criteria
On Nov 23, 2012, at 6:32 PM, arun wrote:
Hi David, Tried the solution on a slightly different data: dat <- read.table(text=" value class percent 15526 36 4.6875 15527 62 85.9375 15527 82 32.4564 15528 36 70.3125 15528 62 9.375 15528 82 74.6875 15529 72 50.0000 15530 72 50.0000 ", header = TRUE) dat.a <- dat[ dat[["class"]] %in% dat[ dat[["percent"]] >70, "class"] , ] row.names(dat.a) <- unlist(tapply(dat.a$class, dat.a$class, function(x) paste0(x, letters[1:length(x)]))) dat.a # value class percent #36a 15526 36 4.6875 #36b 15527 62 85.9375 #62a 15527 82 32.4564 #62b 15528 36 70.3125 #82a 15528 62 9.3750 #82b 15528 82 74.6875
Great. Seems to be working as requested. Er, .... What's your point?
David. > ----- Original Message ----- > From: David Winsemius <dwinsemius at comcast.net> > To: prasmas <prasad4rr at gmail.com> > Cc: r-help at r-project.org > Sent: Friday, November 23, 2012 7:40 PM > Subject: Re: [R] R help..subsetting data frame that meeting multiple > criteria > > > On Nov 23, 2012, at 1:14 PM, prasmas wrote: > >> Hi, >> I am new to R. I am trying to regroup data frame using multiple >> constrains. >> for example >> >> data frame: data >> value class percent >> 15526 36 4.6875 >> 15527 62 85.9375 >> 15527 82 32.4564 >> 15528 36 70.3125 >> 15528 62 9.375 >> 15528 82 74.6875 >> >> I need to regroup each class that have greater than or equal to 70 >> percent >> into new group. Similarly, I also need to regroup each class that >> have less >> than 70 percent into new group. >> >> I can do this by using following syntax for each class >> class36<- data[data$class==36&data$percent>70,] >> class36a<- data[data$class==36&data$percent<=70,] >> but I have 100 different classes. In order to do this for all 100 >> classes, I >> have write that syntax 100 times. There would be some way to do >> dynamically >> to regroup for 100 classes (may be using for loop) but I dont know. >> Can you >> please help in this. >> Output should be like >> data frame: class36 >> value class percent >> 15528 36 70.3125 >> >> data frame: class36a >> value class percent >> 15526 36 4.6875 >> >> dat.a <- dat[ dat[["class"]] %in% dat[ dat[["percent"]] >70, >> "class"] , ] >> dat.a > value class percent > 1 15526 36 4.6875 > 2 15527 62 85.9375 > 3 15527 82 32.4564 > 4 15528 36 70.3125 > 5 15528 62 9.3750 > 6 15528 82 74.6875 > >> row.names(dat.a) <- unlist(tapply(dat.a$class, dat.a$class, >> function(x) paste0(x, letters[1:length(x)]))) >> dat.a > value class percent > 36a 15526 36 4.6875 > 36b 15527 62 85.9375 > 62a 15527 82 32.4564 > 62b 15528 36 70.3125 > 82a 15528 62 9.3750 > 82b 15528 82 74.6875 > > You can split by the NROW of dat.a if you want. > > --David. >> >> data frame: class62 >> 15527 62 85.9375 >> >> data frame: class62a >> 15528 62 9.375 >> >> data frame: class82 >> 15528 82 74.6875 >> >> data frame: class82a >> 15527 82 32.4564 >> >> Thank you very much your help.. >> P. >> >> >> >> -- >> View this message in context: http://r.789695.n4.nabble.com/R-help-subsetting-data-frame-that-meeting-multiple-criteria-tp4650601.html >> Sent from the R help mailing list archive at Nabble.com. >> >> ______________________________________________ >> R-help at 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. > > David Winsemius, MD > Alameda, CA, USA > > ______________________________________________ > R-help at 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. > David Winsemius, MD Alameda, CA, USA