R help..subsetting data frame that meeting multiple criteria
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 A.K. ----- 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.