Aliases: extract extract,Raster,vector-method extract,Raster,matrix-method extract,Raster,data.frame-method extract,Raster,SpatialPoints-method extract,Raster,SpatialLines-method extract,Raster,SpatialPolygons-method extract,Raster,sf-method extract,Raster,Extent-method extract,SpatialPolygons,SpatialPoints-method extract,SpatialPolygons,data.frame-method extract,SpatialPolygons,matrix-method
### ** Examples r <- raster(ncol=36, nrow=18, vals=1:(18*36)) ############################### # extract values by cell number ############################### extract(r, c(1:2, 10, 100))
[1] 1 2 10 100
s <- stack(r, sqrt(r), r/r) extract(s, c(1, 10, 100), layer=2, n=2)
layer.2 layer.3 [1,] 1.000000 1 [2,] 3.162278 1 [3,] 10.000000 1
############################### # extract values with points ############################### xy <- cbind(-50, seq(-80, 80, by=20)) extract(r, xy)
[1] 626 554 482 410 338 266 194 122 50
sp <- SpatialPoints(xy) extract(r, sp, method='bilinear')
[1] 607.5 535.5 463.5 391.5 319.5 247.5 175.5 103.5 31.5
# examples with a buffer extract(r, xy[1:3,], buffer=1000000)
[[1]] [1] 586 587 588 589 590 591 592 593 620 621 622 623 624 625 626 627 628 629 630 [20] 631 [[2]] [1] 517 518 552 553 554 555 [[3]] [1] 445 446 481 482
extract(r, xy[1:3,], buffer=1000000, fun=mean)
[1] 611.1 541.5 463.5
## illustrating the varying size of a buffer (expressed in meters) ## on a longitude/latitude raster z <- extract(r, xy, buffer=1000000) s <- raster(r) for (i in 1:length(z)) { s[z[[i]]] <- i } ## compare with raster that is not longitude/latitude crs(r) <- "+proj=utm +zone=17" xy[,1] <- 50 z <- extract(r, xy, buffer=8) for (i in 1:length(z)) { s[z[[i]]] <- i } plot(s)
# library(maptools) # data(wrld_simpl) # plot(wrld_simpl, add=TRUE) ############################### # extract values with lines ############################### r <- raster(ncol=36, nrow=18, vals=1:(18*36)) cds1 <- rbind(c(-50,0), c(0,60), c(40,5), c(15,-45), c(-10,-25)) cds2 <- rbind(c(80,20), c(140,60), c(160,0), c(140,-55)) lines <- spLines(cds1, cds2) extract(r, lines)
[[1]] [1] 126 127 161 162 163 164 196 197 200 201 231 232 237 266 267 273 274 302 310 [20] 311 338 346 381 382 414 417 450 451 452 453 487 488 [[2]] [1] 139 140 141 174 175 177 208 209 210 213 243 244 249 250 279 286 322 358 359 [20] 394 429 430 465 501 537
############################### # extract values with polygons ############################### cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20)) cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0)) polys <- spPolygons(cds1, cds2) v <- extract(r, polys) # mean for each polygon unlist(lapply(v, function(x) if (!is.null(x)) mean(x, na.rm=TRUE) else NA ))
[1] 387.8158 329.3913
# v <- extract(r, polys, cellnumbers=TRUE) # weighted mean # v <- extract(r, polys, weights=TRUE, fun=mean) # equivalent to: # v <- extract(r, polys, weights=TRUE) # sapply(v, function(x) if (!is.null(x)) {sum(apply(x, 1, prod)) / sum(x[,2])} else NA) ############################### # extract values with an extent ############################### e <- extent(150,170,-60,-40) extract(r, e)
[1] 502 503 538 539
#plot(r) #plot(e, add=T)