[R-sig-Geo] Extract Raster Data Values to Shapefile
Zivan Karaman
z|v@n@k@r@m@n @end|ng |rom gm@||@com
Thu May 12 12:03:29 CEST 2022
Hi,
The na.rm = TRUE excludes any missing values BEFORE applying the aggregate
function (like mean, min, max, etc.). Without it, the missing values
propagate, i.e., the aggregate function returns NA if any missing value in
present.
Hope this clarifies.
Kind regards,
Zivan
On Thu, May 12, 2022 at 11:43 AM <lucfrank using mail.uni-mannheim.de> wrote:
> Thanks for all the helpful input.
> I have used terra::extract, and it worked.
>
> I have included: touches = TRUE,na.rm = TRUE, to eliminate all NAs.
>
> I was wondering what na.rm does here?
> I know it from dplyr functions, but how can I imagine here how it works?
>
>
>
> Zitat von Julien Rodriguez <julienrodriguez.ardaspm using gmail.com>:
>
> > Thanks: it is true that handling missing values when extracting from a
> > raster can sometimes be perilous.
> >
> > Same example with missing values and playing with terra::extract
> arguments
> > to take the best decision about them.
> >
> > library(terra)
> > library(sf)
> >
> > # Create a SpatRaster
> > r <- rast(ncols=5, nrows=5, xmin=0, xmax=5, ymin=0, ymax=5)
> > val <- 1:25
> > # add randomly selected NAs
> > set.seed(220512)
> > val[sample(1:25,4)] <- NA
> >
> > values(r) <- val
> >
> > # Create a polygon object as sf
> > p1 <- rbind(c(1, 1), c(3, 1), c(3, 3), c(1, 3), c(1, 1))
> > p2 <- rbind(c(4, 0), c(4, 1), c(5, 1), c(5, 0), c(4, 0))
> > p3 <- rbind(c(1.6, 1.6), c(3, 1.6), c(3, 3), c(1.6, 3), c(1.6, 1.6))
> > myPol <- st_sf(code = c(1:3), geometry =
> st_sfc(list(st_polygon(list(p1)),
> > st_polygon(list(p2)), st_polygon(list(p3)))))
> >
> > # Polygon object as SpatVector
> > myPolAsSpatVect <- vect(st_geometry(myPol))
> >
> > plot(r)
> > plot(myPolAsSpatVect, add = TRUE)
> >
> > # Here is your extraction, using fun argument, you can decide how to
> > aggregate the values by district border
> > terra::extract(r, myPolAsSpatVect, fun = mean)
> > terra::extract(r, myPolAsSpatVect, fun = mean, na.rm = TRUE)
> > # By default, the extraction will concern pixels whose center point is
> > within the polygon
> > terra::extract(r, myPolAsSpatVect, fun = mean, na.rm = TRUE, touches =
> TRUE)
> > terra::extract(r, myPolAsSpatVect, fun = mean, na.rm = TRUE, exact =
> TRUE)
> >
> > # without aggregation
> > terra::extract(r, myPolAsSpatVect)
> > terra::extract(r, myPolAsSpatVect, exact = TRUE)
> > terra::extract(r, myPolAsSpatVect, touches = TRUE)
> >
> > Regards
> >
> >
> >
> > Le jeu. 12 mai 2022 à 09:29, Jordan Chamberlin <
> jordan.chamberlin using gmail.com>
> > a écrit :
> >
> >> One way to deal with NAs is simply to add an argument to terra::extract:
> >> na.rm=TRUE
> >>
> >>
> >>
> >> On Wed, May 11, 2022 at 9:59 PM GilbertoCamara <
> >> gilberto.camara.inpe using gmail.com> wrote:
> >>
> >>> Dear Julian,
> >>>
> >>> Your script works nicely if the raster data if well-behaved. In real
> >>> life, raster data can have missing values, which have to be dealt with.
> >>>
> >>> Best
> >>> Gilberto
> >>> ============================
> >>> Prof Dr Gilberto Camara
> >>> Senior Researcher
> >>> National Institute for Space Research (INPE), Brazil
> >>>
> >>>
> https://urldefense.com/v3/__https://gilbertocamara.org/__;!!HXCxUKc!xb3Skg9BEorRUu-1yoW_jHkQRP9y6tC81a3GXDuYrM-JEP1U_aBOybnpLw7uroqGQsB8yGdvdj8X4xbotnvel5LZQAkw$
> >>> =============================
> >>>
> >>>
> >>>
> >>>
> >>> > On 11 May 2022, at 14:52, Julien Rodriguez <
> >>> julienrodriguez.ardaspm using gmail.com> wrote:
> >>> >
> >>> > Hi Luca and Zivan,
> >>> >
> >>> >
> >>> > Maybe this toy example using terra and sf (probably the class of your
> >>> > district borders object) may help.
> >>> >
> >>> > library(terra)
> >>> > library(sf)
> >>> >
> >>> > # Create a SpatRaster
> >>> > r <- rast(ncols=5, nrows=5, xmin=0, xmax=5, ymin=0, ymax=5)
> >>> > values(r) <- 1:25
> >>> >
> >>> > # Create a polygon object as sf
> >>> > p1 <- rbind(c(1, 1), c(3, 1), c(3, 3), c(1, 3), c(1, 1))
> >>> > p2 <- rbind(c(4, 0), c(4, 1), c(5, 1), c(5, 0), c(4, 0))
> >>> > myPol <- st_sf(code = c(1:2), geometry =
> >>> st_sfc(list(st_polygon(list(p1)),
> >>> > st_polygon(list(p2)))))
> >>> >
> >>> > # Polygon object as SpatVector
> >>> > myPolAsSpatVect <- vect(st_geometry(myPol))
> >>> >
> >>> > plot(r)
> >>> > plot(myPolAsSpatVect, add = TRUE)
> >>> >
> >>> > # Here is your extraction, using fun argument, you can decide how to
> >>> > aggregate the values by district border
> >>> > terra::extract(r, myPolAsSpatVect, fun = mean)
> >>> >
> >>> > Regards
> >>> >
> >>> > Julien
> >>> >
> >>> >
> >>> >
> >>> >
> >>> > Le mer. 11 mai 2022 à 18:19, Zivan Karaman <zivan.karaman using gmail.com>
> a
> >>> > écrit :
> >>> >
> >>> >> Hi Luca,
> >>> >> You should perhaps have a look at the crop and mask function in the
> >>> raster
> >>> >> or terra package.
> >>> >> Hope this helps!
> >>> >> Zivan
> >>> >>
> >>> >> On Wed, May 11, 2022 at 6:09 PM <lucfrank using mail.uni-mannheim.de>
> wrote:
> >>> >>
> >>> >>> Hello Everyone,
> >>> >>>
> >>> >>> I have a shapefile with district borders and a raster data file
> >>> (.tif).
> >>> >>>
> >>> >>> How can I extract the value from the raster data onto each
> district in
> >>> >>> the shapefile?
> >>> >>>
> >>> >>> I have the exact thing I want with two shapefiles with the command:
> >>> >>>
> >>> >>> x <- st_join(x,y,join=st_overlaps,left=TRUE,largest=TRUE)
> >>> >>>
> >>> >>> This gives me the result I want. I tried to convert the .tif file
> to a
> >>> >>> shapefile, but this didn't work for me with multiple different
> >>> >>> solutions I found online.
> >>> >>>
> >>> >>> I would appreciate any ideas you might have.
> >>> >>>
> >>> >>> Luca
> >>> >>>
> >>> >>> _______________________________________________
> >>> >>> R-sig-Geo mailing list
> >>> >>> R-sig-Geo using r-project.org
> >>> >>>
> >>>
> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-sig-geo__;!!HXCxUKc!xb3Skg9BEorRUu-1yoW_jHkQRP9y6tC81a3GXDuYrM-JEP1U_aBOybnpLw7uroqGQsB8yGdvdj8X4xbotnvel9iqWVYy$
> >>> >>>
> >>> >>
> >>> >> [[alternative HTML version deleted]]
> >>> >>
> >>> >> _______________________________________________
> >>> >> R-sig-Geo mailing list
> >>> >> R-sig-Geo using r-project.org
> >>> >>
> >>>
> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-sig-geo__;!!HXCxUKc!xb3Skg9BEorRUu-1yoW_jHkQRP9y6tC81a3GXDuYrM-JEP1U_aBOybnpLw7uroqGQsB8yGdvdj8X4xbotnvel9iqWVYy$
> >>> >>
> >>> >
> >>> > [[alternative HTML version deleted]]
> >>> >
> >>> > _______________________________________________
> >>> > R-sig-Geo mailing list
> >>> > R-sig-Geo using r-project.org
> >>> >
> >>>
> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-sig-geo__;!!HXCxUKc!xb3Skg9BEorRUu-1yoW_jHkQRP9y6tC81a3GXDuYrM-JEP1U_aBOybnpLw7uroqGQsB8yGdvdj8X4xbotnvel9iqWVYy$
> >>>
> >>> _______________________________________________
> >>> R-sig-Geo mailing list
> >>> R-sig-Geo using r-project.org
> >>>
> >>>
> https://urldefense.com/v3/__https://stat.ethz.ch/mailman/listinfo/r-sig-geo__;!!HXCxUKc!xb3Skg9BEorRUu-1yoW_jHkQRP9y6tC81a3GXDuYrM-JEP1U_aBOybnpLw7uroqGQsB8yGdvdj8X4xbotnvel9iqWVYy$
> >>>
> >>
> >
> > [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
>
> --
> Luca Frank
> Matrikelnr: 1698155
> 4.FS Politikwissenschaft
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list