[R] Which hist cell each value falls in?

Jim Lemon jim at bitwrit.com.au
Fri Dec 18 08:57:28 CET 2009


On 12/18/2009 06:35 AM, Doug Hill wrote:
> Hi, all. I'm using hist() to obtain a vector of break values in an interval.
> I then want to be able to identify which cell any value from another vector
> falls in.
>
> E.g. applying
>
>    
>> breaks
>>      
>   [1] -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5  0.0  0.5  1.0  1.5  2.0
>
> to
>
>    
>> x
>>      
>   [1] -3.74519666 -0.38183630 -1.22884247 -0.20971824 -0.30533939 -0.36271207
> [7] -2.27513499 -2.23688653 -1.98827155 -1.48666274 -1.26155084 -0.15234555
> [13] -0.09497287  0.34488440
>
> would give
>
>    
>> xcells
>>      
>   [1] 1  8  6  8  8  8  4  4  5  6  6  8  8  9
>
> where:
>                    x<= breaks[1] ->  cell 1
> breaks[1]<  x<= breaks[2] ->  cell 2
> breaks[2]<  x<= breaks[3] ->  cell 3, etc.
>
>    
Hi Doug,
The function below does more or less what you want, except that the bins 
are numbered from zero (meaning that a value is below the range of bins 
as x[1] is) to length(breaks) (meaning that a value is above the range 
of bins).

whichBin<-function(x,breaks,right=TRUE) {
  lenx<-length(x)
  # any leftovers must be out of range
  wb<-rep(lenx,lenx)
  if(right) wb[x<=breaks[1]]<-0
  else wb[x<breaks[1]]<-0
  for(bin in 1:(length(breaks)-1)) {
   if(right) wb[x>breaks[bin] & x<=breaks[bin+1]]<-bin
   else wb[x>=breaks[bin] & x<breaks[bin+1]]<-bin
  }
  return(wb)
}

Jim




More information about the R-help mailing list