Re: Reclassification of raster

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Reclassification of raster

Ben Tupper
Hi John,

I'm happy to help, but I have copied the r-sig-geo list as the community (and you and I) benefit from using the list.

I'm not very clear on what you mean by 'I loose the negative values'. Also, I don't see the connection between the raster you show and the quantile values computed.  If you asked for the 0% quantile you should get the lowest available value - (since all pixels are at or above this value).  According to the raster info you show that should be -0.893809, but instead your 0% quantile is shown to be 40.00199   Perhaps you have unwittingly mixed up the rasters you are using.

Here is what I get using a small reproducible example (thanks, reprex! https://github.com/tidyverse/reprex <https://github.com/tidyverse/reprex>)  You can see that all of the -1 values are classified to class #1.

library(raster)
#> Loading required package: sp

# make a dummy matrix that ranges from -1 to 6
nx = 10
ny = 5
m <- matrix(sample(-1:6, nx*ny, replace = TRUE), nrow = nx, ncol = ny)

# and make a raster
r <- raster(m)
r
#> class       : RasterLayer
#> dimensions  : 10, 5, 50  (nrow, ncol, ncell)
#> resolution  : 0.2, 0.1  (x, y)
#> extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
#> coord. ref. : NA
#> data source : in memory
#> names       : layer
#> values      : -1, 6  (min, max)


# compute the quantiles
pp <- quantile(r, c(0, 0.15, 0.85))
pp
#>  0% 15% 85%
#>  -1   0   5

# classify the pixels according to the quantile each pixel belongs to
ix <- findInterval(getValues(r), pp)

# make a classified version of r (class 0, 1 or 3)
classified_r <- setValues(r, ix)
classified_r
#> class       : RasterLayer
#> dimensions  : 10, 5, 50  (nrow, ncol, ncell)
#> resolution  : 0.2, 0.1  (x, y)
#> extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
#> coord. ref. : NA
#> data source : in memory
#> names       : layer
#> values      : 1, 3  (min, max)

# show how they pair up
df <- data.frame(value = getValues(r), class = getValues(classified_r))
df
#>    value class
#> 1      0     2
#> 2      0     2
#> 3      5     2
#> 4      6     3
#> 5      5     2
#> 6      4     2
#> 7      1     2
#> 8      5     2
#> 9     -1     1
#> 10     2     2
#> 11     0     2
#> 12     1     2
#> 13     3     2
#> 14     3     2
#> 15     6     3
#> 16    -1     1
#> 17     2     2
#> 18     6     3
#> 19     1     2
#> 20     0     2
#> 21     1     2
#> 22     5     2
#> 23     4     2
#> 24     2     2
#> 25     1     2
#> 26     0     2
#> 27     4     2
#> 28     6     3
#> 29     3     2
#> 30     0     2
#> 31     6     3
#> 32     6     3
#> 33     0     2
#> 34     2     2
#> 35     2     2
#> 36     6     3
#> 37     5     2
#> 38     6     3
#> 39     1     2
#> 40     5     2
#> 41     4     2
#> 42     4     2
#> 43     3     2
#> 44     4     2
#> 45     0     2
#> 46     4     2
#> 47     0     2
#> 48     1     2
#> 49     1     2
#> 50    -1     1


Cheers,
Ben


> On Dec 8, 2017, at 7:36 AM, John Wasige <[hidden email]> wrote:
>
> Hi Ben,
>
> We had an email exchange on [hidden email] <mailto:[hidden email]> in June this year on raster classification where you made some suggestions. See the link below
>
>  <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>
>  <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
> http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>
>  <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
> However, when I run the reclassification, I loose the negative values. Any suggestion on how I can have all data classified & not loose pixels?
> Thanks for your help
>
> pp <- quantile(r, c(0, 0.15, 0.85))
> # pp
> #       0%      15%      85%
> # 40.00199 47.64569 82.50751
> ix <- findInterval(getValues(r), pp)
> classified_r <- setValues(r, ix)
>
> ########
>
> My raster looks;
>
> class       : RasterLayer
> dimensions  : 6557, 4281, 28070517  (nrow, ncol, ncell)
> resolution  : 0.0002335903, 0.0001525088  (x, y)
> extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
> coord. ref. : NA
> data source : J:\LPD_data\gpp.tif
> names       : gpp
> values      : -0.893809, 5.855252  (min, max)
>
>
>  <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>
>  <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>

Ben Tupper
Bigelow Laboratory for Ocean Sciences
60 Bigelow Drive, P.O. Box 380
East Boothbay, Maine 04544
http://www.bigelow.org

Ecocast Reports: http://seascapemodeling.org/ecocast.html
Tick Reports: https://report.bigelow.org/tick/
Jellyfish Reports: https://jellyfish.bigelow.org/jellyfish/




        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

Re: Reclassification of raster

John Wasige
Thank you Ben,
works great!

Best Rgds
John

On Sat, Dec 9, 2017 at 12:52 AM, Ben Tupper <[hidden email]> wrote:

> Hi John,
>
> I'm happy to help, but I have copied the r-sig-geo list as the community
> (and you and I) benefit from using the list.
>
> I'm not very clear on what you mean by 'I loose the negative values'.
> Also, I don't see the connection between the raster you show and the
> quantile values computed.  If you asked for the 0% quantile you should get
> the lowest available value - (since all pixels are at or above this
> value).  According to the raster info you show that should be -0.893809,
> but instead your 0% quantile is shown to be 40.00199   Perhaps you have
> unwittingly mixed up the rasters you are using.
>
> Here is what I get using a small reproducible example (thanks, reprex!
> https://github.com/tidyverse/reprex)  You can see that all of the -1
> values are classified to class #1.
>
> library(raster)
> #> Loading required package: sp
>
> # make a dummy matrix that ranges from -1 to 6
> nx = 10
> ny = 5
> m <- matrix(sample(-1:6, nx*ny, replace = TRUE), nrow = nx, ncol = ny)
>
> # and make a raster
> r <- raster(m)
> r
> #> class       : RasterLayer
> #> dimensions  : 10, 5, 50  (nrow, ncol, ncell)
> #> resolution  : 0.2, 0.1  (x, y)
> #> extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
> #> coord. ref. : NA
> #> data source : in memory
> #> names       : layer
> #> values      : -1, 6  (min, max)
>
>
> # compute the quantiles
> pp <- quantile(r, c(0, 0.15, 0.85))
> pp
> #>  0% 15% 85%
> #>  -1   0   5
>
> # classify the pixels according to the quantile each pixel belongs to
> ix <- findInterval(getValues(r), pp)
>
> # make a classified version of r (class 0, 1 or 3)
> classified_r <- setValues(r, ix)
> classified_r
> #> class       : RasterLayer
> #> dimensions  : 10, 5, 50  (nrow, ncol, ncell)
> #> resolution  : 0.2, 0.1  (x, y)
> #> extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
> #> coord. ref. : NA
> #> data source : in memory
> #> names       : layer
> #> values      : 1, 3  (min, max)
>
> # show how they pair up
> df <- data.frame(value = getValues(r), class = getValues(classified_r))
> df
> #>    value class
> #> 1      0     2
> #> 2      0     2
> #> 3      5     2
> #> 4      6     3
> #> 5      5     2
> #> 6      4     2
> #> 7      1     2
> #> 8      5     2
> #> 9     -1     1
> #> 10     2     2
> #> 11     0     2
> #> 12     1     2
> #> 13     3     2
> #> 14     3     2
> #> 15     6     3
> #> 16    -1     1
> #> 17     2     2
> #> 18     6     3
> #> 19     1     2
> #> 20     0     2
> #> 21     1     2
> #> 22     5     2
> #> 23     4     2
> #> 24     2     2
> #> 25     1     2
> #> 26     0     2
> #> 27     4     2
> #> 28     6     3
> #> 29     3     2
> #> 30     0     2
> #> 31     6     3
> #> 32     6     3
> #> 33     0     2
> #> 34     2     2
> #> 35     2     2
> #> 36     6     3
> #> 37     5     2
> #> 38     6     3
> #> 39     1     2
> #> 40     5     2
> #> 41     4     2
> #> 42     4     2
> #> 43     3     2
> #> 44     4     2
> #> 45     0     2
> #> 46     4     2
> #> 47     0     2
> #> 48     1     2
> #> 49     1     2
> #> 50    -1     1
>
>
> Cheers,
> Ben
>
>
> On Dec 8, 2017, at 7:36 AM, John Wasige <[hidden email]> wrote:
>
> Hi Ben,
>
> We had an email exchange on [hidden email] in June this year on
> raster classification where you made some suggestions. See the link below
>
>
> <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>
>
> <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
> http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclas
> sify-raster-td7591266.html
>
>
> <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
> However, when I run the reclassification, I loose the negative values. Any
> suggestion on how I can have all data classified & not loose pixels?
> Thanks for your help
>
> pp <- quantile(r, c(0, 0.15, 0.85))
> # pp
> #       0%      15%      85%
> # 40.00199 47.64569 82.50751
> ix <- findInterval(getValues(r), pp)
> classified_r <- setValues(r, ix)
>
> ########
>
> My raster looks;
>
> class       : RasterLayer
> dimensions  : 6557, 4281, 28070517  (nrow, ncol, ncell)
> resolution  : 0.0002335903, 0.0001525088  (x, y)
> extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
> coord. ref. : NA
> data source : J:\LPD_data\gpp.tif
> names       : gpp
> values      : -0.893809, 5.855252  (min, max)
>
>
>
>
> <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>
>
> <http://r-sig-geo.2731867.n2.nabble.com/Thresholds-amp-reclassify-raster-td7591266.html>
>
>
> Ben Tupper
> Bigelow Laboratory for Ocean Sciences
> 60 Bigelow Drive
> <https://maps.google.com/?q=60+Bigelow+Drive&entry=gmail&source=g>, P.O.
> Box 380
> East Boothbay, Maine 04544
> http://www.bigelow.org
>
> Ecocast Reports: http://seascapemodeling.org/ecocast.html
> Tick Reports: https://report.bigelow.org/tick/
> Jellyfish Reports: https://jellyfish.bigelow.org/jellyfish/
>
>
>
>

        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Reply | Threaded
Open this post in threaded view
|

point pattern in 3D

Paolo Piras
Dear members,

I write in order to ask if someone could indicate me if there is a way to measure and compare between groups the 3D homogeneity of a distribution of points in 3D. I think to some extension in 3D of usual point pattern analysis.

Thanks in advance for any advice

Best

Paolo


        [[alternative HTML version deleted]]

_______________________________________________
R-sig-Geo mailing list
[hidden email]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo