[R-sig-Geo] Does stars::st_extract preserve records order

Michael Sumner md@umner @end|ng |rom gm@||@com
Wed Jul 27 16:27:40 CEST 2022


lol, as a matrix - does it just?

very clever

On Wed, 27 July 2022, 22:36 Ben Tupper, <btupper using bigelow.org> wrote:

> Hi,
>
> I have never observed st_extract() fail to preserve row order.
>
> Your workflow works well.  The documentation for st_extract() mentions
> that if you might see better performance for large sets of points if
> you pass `at` locations as a matrix instead as sf.  I don't think it
> makes it any more or less elegant.  Such an approach might look like
> this...
>
> ### start
>
> # Set column names of matrix/data.frame to months
> set_column_names <- function(x) {
>   colnames(x) <- month.abb
>   x
> }
>
> # Extract monthly avg temperature for cities
> tavg_df <- st_extract(tavg, at = sf::st_coordinates(sfdf)) %>%  # <- pass
> matrix
>   set_column_names() %>%
>        # <- name the columns
>   dplyr::as_tibble()
>                     # <-cast as data frame
>
> # Recombine with original sf dataframe
> full_df <- cbind(sfdf, tavg_df)
>
> # Simple feature collection with 3 features and 13 fields
> # Geometry type: POINT
> # Dimension:     XY
> # Bounding box:  xmin: 2.3522 ymin: 43.2965 xmax: 5.3698 ymax: 48.8566
> # Geodetic CRS:  WGS 84
> #       names Jan Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov Dec
> # 1     Paris 4.8 5.4  8.2 10.6 14.8 17.6 20.0 20.0 16.5 12.3  7.8 5.7
> # 2 Marseille 8.6 9.2 11.1 13.3 17.3 20.7 23.6 23.4 20.3 16.4 11.7 9.5
> # 3      Lyon 3.6 5.1  8.1 10.8 15.4 18.7 21.7 21.2 17.2 12.5  7.2 4.5
> #                 geometry
> # 1 POINT (2.3522 48.8566)
> # 2 POINT (5.3698 43.2965)
> # 3  POINT (4.8357 45.764)
>
> ### end
>
> Cheers,
> Ben
>
> On Wed, Jul 27, 2022 at 5:54 AM DUTRIEUX Loic
> <Loic.DUTRIEUX using ec.europa.eu> wrote:
> >
> > Hi everyone,
> >
> > I'm wondering whether st_extract() from stars package preserves the
> order of the input sf dataframe.
> > See the example below; is it a safe approach? Is there perhaps a more
> "elegant" way to do the same extraction?
> >
> > library(sf)
> > library(stars)
> > library(geodata)
> > library(magrittr)
> >
> > # Create sf dataframe of cities
> > cities <- data.frame(x=c(2.3522, 5.3698, 4.8357),
> >                      y=c(48.8566, 43.2965, 45.7640),
> >                      names=c('Paris', 'Marseille', 'Lyon'))
> > sfdf <- st_as_sf(cities,
> >                  coords=c('x','y'),
> >                  crs=st_crs(4326),
> >                  agr='identity')
> >
> > # Get raster of monthly average tempature
> > tavg <- worldclim_tile(var = 'tavg', lon = 15, lat = 45, path =
> tempdir()) %>%
> >     st_as_stars()
> >
> > # Extract monthly avg temperature for cities
> > tavg_df <- st_extract(tavg, at = sfdf) %>%
> >     st_as_sf() %>%
> >     st_drop_geometry()
> >
> > # Recombine with original sf dataframe
> > full_df <- cbind(sfdf, tavg_df)
> >
> >
> > Kind regards,
> > Loïc
> >
> > _______________________________________________
> > R-sig-Geo mailing list
> > R-sig-Geo using r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>
>
>
> --
> Ben Tupper (he/him)
> Bigelow Laboratory for Ocean Science
> East Boothbay, Maine
> http://www.bigelow.org/
> https://eco.bigelow.org
>
> _______________________________________________
> 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