[R] subsetting a dataframe

William Dunlap wdunlap at tibco.com
Fri Jun 4 23:21:27 CEST 2010


> -----Original Message-----
> From: r-help-bounces at r-project.org 
> [mailto:r-help-bounces at r-project.org] On Behalf Of yjmha69
> Sent: Friday, June 04, 2010 12:28 PM
> To: R-help at r-project.org
> Subject: [R] subsetting a dataframe
> 
> Hi there, 
> > a<-data.frame(c(1,2,2,5,9,9),c("A","B","C","D","E","F")) 
> > names(a)<-c("x1","x2") 
> > max(table(a$x1)) 
> [1] 2 
> > 
> The above shows the max count for x1 is 2, which is correct. 
> But we can't tell 
> there are 2 groups that meet this criteria: 2,2 and 9,9. 
> I then want to extract the records that has the hightest count 
> > a[max(table(a$x1)),] 
>   x1 x2 
> 2  2  B 
> This is not working, since it is equvalent to a[2,] 
> What I want is 
>    x1 x2 
> 2 2   B 
> 3 2   C 
> 5 9   E 
> 5 9   F 
> 
> I think this should be very easy, but I'm a beginner :-) 

One way is to use merge to combine your table with
the original data.frame:
  > tmp <- merge(a, as.data.frame(table(a$x1)), by.x="x1", by.y="Var1")
  > tmp[tmp$Freq==max(tmp$Freq), ,drop=FALSE]
Another way is to use ave:
  > tmp <- with(a, ave(x1, x1, FUN=length))
  > a[tmp==max(tmp), , drop=FALSE]
Another way is
  > a[as.character(a$x1) %in% names(tmp[tmp==max(tmp)]), , drop=FALSE]
(This last one might have problems when some values in a$x1
are different but so close that as.character() makes the same
string out of them.)

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com 


> 
> Thanks 
> 
> YJM 
> 
> 
> 
> 
> 
> ______________________________________________
> 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.
> 



More information about the R-help mailing list