[R-sig-Geo] stars analogous of raster::aggregate

Julian M. Burgos ju||@n@burgo@ @end|ng |rom h@|ogv@tn@|@
Tue Sep 8 18:33:08 CEST 2020


Dear all,

The raster package has the raster::aggregate function that can be used to reduce the resolution of a raster by aggregating cells by a specific factor. For example, this reduces the resolution of the L7_ETMs.tif raster by a factor of 10:

library(raster)

rst1 <-  raster(system.file("tif/L7_ETMs.tif", package = "stars"))

rst2 <- aggregate(rst1, fact = 10, fun = mean)

> res(rst1)
[1] 28.5 28.5

> res(rst2)
[1] 285 285

I am trying to do the same thing with a stars object.  The stars package has the stars::aggregate function, but for spatial aggregation it takes an object of class sf or sfc, so it is meant to be used for aggregation over polygons.  I could do something like this:

library(stars)
st1 <- read_stars(system.file("tif/L7_ETMs.tif", package = "stars")) %>%
  slice(band, 1)
grid <- st_make_grid(st_bbox(st1) %>%
                     st_as_sfc(),
                     cellsize = 285)

st2 <- aggregate(st1, grid, mean)

But the resulting st2 object is not a raster (i.e. does not X and Y dimensions), but instead has a single dimension and contains the geometries of the grid polygons.

> st1
stars object with 2 dimensions and 1 attribute
attribute(s):
  L7_ETMs.tif
 Min.   : 47.00
 1st Qu.: 67.00
 Median : 78.00
 Mean   : 79.15
 3rd Qu.: 89.00
 Max.   :255.00
dimension(s):
  from  to  offset delta                       refsys point values
x    1 349  288776  28.5 UTM Zone 25, Southern Hem... FALSE   NULL [x]
y    1 352 9120761 -28.5 UTM Zone 25, Southern Hem... FALSE   NULL [y]
> st2
stars object with 1 dimensions and 1 attribute
attribute(s):
  L7_ETMs.tif
 Min.   : 57.76
 1st Qu.: 69.22
 Median : 79.04
 Mean   : 79.09
 3rd Qu.: 87.63
 Max.   :123.51
dimension(s):
         from   to offset delta                       refsys point
geometry    1 1260     NA    NA UTM Zone 25, Southern Hem... FALSE
                                                                    values
geometry POLYGON ((288776.3 9110729,...,...,POLYGON ((298466.3 9120704,...
>

So I am stuck, wondering if perhaps st_apply is the answer.  What would be the best way to replicate what the raster::aggregate function does using stars?  Any ideas?

Many thanks,

Julian

--
Julian Mariano Burgos, PhD
Hafrannsóknastofnun, rannsókna- og ráðgjafarstofnun hafs og vatna/
Marine and Freshwater Research Institute
Botnsjávarsviðs / Demersal Division
  Fornubúðir 5, IS-220 Hafnarfjörður, Iceland
www.hafogvatn.is
Sími/Telephone : +354-5752037
Netfang/Email: julian.burgos using hafogvatn.is
rr



More information about the R-sig-Geo mailing list