lol, as a matrix - does it just? very clever
On Wed, 27 July 2022, 22:36 Ben Tupper, <btup...@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.dutri...@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@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@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > [[alternative HTML version deleted]] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo