[GRASS-dev] Determine raster rank order per raster cell
Moritz Lennert
mlennert at club.worldonline.be
Thu Jan 23 02:15:17 PST 2014
On 22/01/14 23:20, Paulo van Breugel wrote:
> Does anybody know a smart way to calculate for X rasters per raster cell
> the rank order of those rasters? For example, if I have three rasters
> X1, X2 and X3:
>
> X1 X2 X3
> 1 3 2
> 2 5 8
> 5 1 3
> NA 8 2
>
> would give three new raster layers with the values:
>
> Y1 Y2 Y3
> 1 3 2
> 1 2 3
> 3 1 2
> NA 2 1
>
> I am now reading the rasters in R and using a combination of apply() and
> rank() function to create new raster layers:
>
> in <- c("X1", "X2", "X3")
> lyrs <- readRAST6(in)
> tmp <- apply(lyrs at data, 1, function(x){
> rank(x, na.last="keep", ties.method="average")
> })
> lyrs at data <- t(tmp)
>
> I am sure there are better ways in R, but especially when dealing with
> very large raster layers, I was hoping there is a way to do this
> directly in GRASS GIS. Or otherwise, would it be difficult to create a
> function for this?
I don't know how efficient this would be, but how about using r.mapcalc
with something like this for each map:
Y1 = if(X1>X2, if(X1>X3, 1, 2), if(X1>X3, 2, 3))
Moritz
More information about the grass-dev
mailing list