Search code examples
rextractrasterr-rasterrgdal

R How to extract the mean values of a raster for each polygon for an altitude greater than 600m?


First, I managed to extract the average raster temperature values for each polygon, with the following program:

You can download the GIS layers on this link :

https://depots.univ-perp.fr/get?k=iTzEDSUkdyZVw2st78G

## load packages 

library(raster); library(rgdal) 

## Read rasters

ras_temp<-raster("ras_temp.tif")
plot(ras_temp)
ras_alti<-raster("ras_alti.tif")

## read polygon

polygon <- readOGR(dsn = getwd(), layer = "polygon") 
plot(polygon,add=TRUE)

## extract mean value for each polygon

v1 <- extract( ras_temp, polygon, fun=mean, na.rm=TRUE)
nom <- sapply(polygon@polygons, slot, "ID")
v1 <- data.frame(ID = nom, Value = v1)
View(v1)

Then, I want to extract the mean values of the temperature for each polygon but only for the surfaces that exceed 600 m of altitude?

Unfortunately, I can not do it, my question how to integrate the altitude condition in my function "extract"?

Thanks in advance


Solution

  • You can easily do it like this:

    # first resample the altitude raster to the temperature one so that they are
    # "aligned"
    ras_alti.new = resample(ras_alti, ras_temp, "bilinear")
    
    # set to NA all data in ras_temp corresponding to cells in ras_alti.new below 600 
    # metre
    ras_temp.new = ras_temp
    ras_temp.new[ras_alti.new <= 600] = NA
    
    # extract the data
    v2 <- extract(ras_temp.new, polygon, fun=mean, na.rm=TRUE, sp = T)
    v2@data
    
    ID ras_temp
    0 417 64.11342
    1 433 68.53541