Skip to contents

When x and y are different classes, poly_weight will be converted to the class of x.

Usage

summarize_aw(x, y, ...)

# S4 method for class 'SpatVector,SpatVector'
summarize_aw(
  x,
  y,
  target_fields = NULL,
  id_x = "ID",
  fun = stats::weighted.mean,
  extent = NULL,
  ...
)

# S4 method for class 'character,character'
summarize_aw(
  x,
  y,
  target_fields = NULL,
  id_x = "ID",
  fun = stats::weighted.mean,
  out_class = "terra",
  extent = NULL,
  ...
)

# S4 method for class 'sf,sf'
summarize_aw(
  x,
  y,
  target_fields = NULL,
  id_x = "ID",
  fun = NULL,
  extent = NULL,
  ...
)

Arguments

x

A sf/SpatVector object or file path of polygons detectable with GDAL driver at weighted means will be calculated.

y

A sf/SpatVector object or file path of polygons from which weighted means will be calculated.

...

Additional arguments depending on class of x and y.

target_fields

character. Field names to calculate area-weighted.

id_x

character(1). The unique identifier of each polygon in x. Default is "ID".

fun

function(1)/character(1). The function to calculate the weighted summary. Default is stats::weighted.mean. The function must have a w argument. If both x and y are sf, it should be one of c("sum", "mean"). It will determine extensive argument in sf::st_interpolate_aw.

extent

numeric(4) or SpatExtent object. Extent of clipping x. It only works with x of character(1) file path. See terra::ext for more details. Coordinate systems should match.

out_class

character(1). "sf" or "terra". Output class.

Value

A data.frame with all numeric fields of area-weighted means.

Note

x and y classes should match. If x and y are characters, they will be read as sf objects.

See also

Other Macros for calculation: extract_at(), kernelfunction(), summarize_sedc()

Author

Insang Song geoissong@gmail.com

Examples

# package
library(sf)
options(sf_use_s2 = FALSE)
nc <- sf::st_read(system.file("shape/nc.shp", package="sf"))
#> Reading layer `nc' from data source 
#>   `/usr/local/lib/R/site-library/sf/shape/nc.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> Geodetic CRS:  NAD27
nc <- sf::st_transform(nc, 5070)
pp <- sf::st_sample(nc, size = 300)
pp <- sf::st_as_sf(pp)
pp[["id"]] <- seq(1, nrow(pp))
sf::st_crs(pp) <- "EPSG:5070"
ppb <- sf::st_buffer(pp, nQuadSegs=180, dist = units::set_units(20, "km"))

system.time(
  ppb_nc_aw <-
    summarize_aw(
      ppb, nc, c("BIR74", "BIR79"),
      "id", fun = "sum"
    )
)
#> Warning: st_interpolate_aw assumes attributes are constant or uniform over areas of x
#>    user  system elapsed 
#>   0.352   0.000   0.352 
summary(ppb_nc_aw)
#>      BIR74              BIR79                  geometry  
#>  Min.   :   52.34   Min.   :  106.4   POLYGON      :300  
#>  1st Qu.: 1431.93   1st Qu.: 1743.3   epsg:5070    :  0  
#>  Median : 2522.97   Median : 3122.3   +proj=aea ...:  0  
#>  Mean   : 3069.54   Mean   : 3927.5                      
#>  3rd Qu.: 3984.55   3rd Qu.: 4983.8                      
#>  Max.   :13683.47   Max.   :19424.4                      

# terra examples
library(terra)
ncpath <- system.file("gpkg/nc.gpkg", package = "sf")
elev <- system.file("ex/elev.tif", package = "terra")
nc <- terra::vect(ncpath)
elev <- terra::rast(elev)
pp <- terra::spatSample(nc, size = 300)
pp <- terra::project(pp, crs(elev))
pp <- terra::as.points(pp)
#> Warning: [as.points] returning a copy
pp[["id"]] <- seq(1, nrow(pp))
ppb <- terra::buffer(pp, 20000)

system.time(
  ppb_nc_aw <-
    summarize_aw(
      ppb, nc, c("BIR74", "BIR79"), "id",
      fun = sum
    )
)
#> Warning: [intersect] different crs
#>    user  system elapsed 
#>   0.079   0.000   0.079 
summary(ppb_nc_aw)
#>        id             BIR74               BIR79          
#>  Min.   :  1.00   Min.   :2.464e+08   Min.   :2.464e+08  
#>  1st Qu.: 75.75   1st Qu.:1.153e+09   1st Qu.:1.153e+09  
#>  Median :150.50   Median :1.251e+09   Median :1.251e+09  
#>  Mean   :150.50   Mean   :1.147e+09   Mean   :1.147e+09  
#>  3rd Qu.:225.25   3rd Qu.:1.251e+09   3rd Qu.:1.251e+09  
#>  Max.   :300.00   Max.   :1.252e+09   Max.   :1.252e+09