# Re: [R] Sorting values within a raster

From: David Winsemius <dwinsemius_at_comcast.net>
Date: Thu, 21 Apr 2011 22:36:18 -0400

On Apr 21, 2011, at 9:33 PM, Sara Maxwell wrote:

> Hi David et al,
> Thanks for your help. I spent the afternoon and thought that would
> work but then I realized it was giving a different answer.
>
> I have counts ('hits') in each grid cell, and have then calculated
> the proportion of the total hits represented in each cell (such that
> the sum of all cells = 1). I want to take the cell with largest
> proportion, add the next largest proportion to it, etc until I reach
> 10% of the TOTAL number of 'hits'. Quantiles unfortunately are
> created using the total number of CELLS and not the total number of
> HITS, if that makes sense.

So sort, then cumsum and finally do findInterval. An example would "focus the mind".

```--
David.

>
> Any thoughts??

>
> Many many thanks,
> Sara
> _________________________________
>
> Sara M. Maxwell, Ph.D.
>
>
>
> On Apr 21, 2011, at 1:26 PM, David Winsemius wrote:
>
>>
>> On Apr 21, 2011, at 3:23 PM, Sara Maxwell wrote:
>>
>>> I am working with a raster and want to take values assigned to
>>> each cell and sort them from largest to smallest, then
>>> cummulatively sum them together (in order from largest to
>>> smallest).  I'll then be coding the individual cells such that the
>>> top 10% of the largest cell values can be visualize with one
>>> color, the next 10% with another and so on.
>>>
>>> I have tried a number of schemes but am having trouble figuring
>>> out how to chose the maximum value, code it and re-search the
>>> raster for the next highest value without replacement.  I am
>>> assuming this requires a loop, unless there is a function that
>>> will do this automatically.
>>
>> ?quantile
>>
>>>
>>> Here is a sample dataset:
>>>
>>> library(raster)
>>> r <- raster(ncol=10, nrow=10)
>>> values(r) <- runif(ncell(r))
>>
>>
>> > quantile(values(r), prob=seq(0,1,by=0.1))
>>        0%         10%         20%         30%         40%
>> 0.004888148 0.106378528 0.217009097 0.307201289 0.364990984
>>       50%         60%         70%         80%         90%
>> 0.512523817 0.593382875 0.667916094 0.722919876 0.835839832
>>      100%
>> 0.996683575
>>
>> You will also need findInterval()
>>
>> If you want to create a factor that will assign your colors.
>> perhaps this could be used to index a suitable color vector:
>>
>> fac <- findInterval(values(r), quantile(values(r),
>> prob=seq(0,1,by=0.1)) )
>> > fac
>> [1]  6 10  1 10  7  7  8 10  2  9  9  1  6  2  9  1  9  4  2  2
>> [21]  3  4  8  9  7  1  9  2 10  5  4  9  8  1  8 10  1 11  3  5
>> [41]  5  6  6  5  6  7  4  7  5  3  8  6  3  4 10  4  7  7  8  9
>> [61] 10  4  1  8  8  8  3  7  5  1  9  5  2  7  2 10  3  8  4  9
>> [81]  6  6  2  6 10  5  5  4  3  6  2  2  1  3  3  3  4  7  1  5
>>
>> David Winsemius, MD
>> West Hartford, CT
>>
>
> ______________________________________________
> R-help_at_r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help