экспортировать один объект SF в несколько шейп-файлов - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть один большой шейп-файл, который мне нужно разделить по атрибутам (сгруппированным значениям) на несколько. В ArcGIS эта функция вызывает Split By Attribute Давайте прочитаем nc массив данных из библиотеки sf в качестве примера

library(tidyverse)
library(sf)

nc = st_read(system.file("shape/nc.shp", package="sf"))

nc

Simple feature collection with 100 features and 14 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
epsg (SRID):    4267
proj4string:    +proj=longlat +datum=NAD27 +no_defs
First 10 features:
    AREA PERIMETER CNTY_ CNTY_ID        NAME  FIPS FIPSNO CRESS_ID
1  0.114     1.442  1825    1825        Ashe 37009  37009        5
2  0.061     1.231  1827    1827   Alleghany 37005  37005        3
3  0.143     1.630  1828    1828       Surry 37171  37171       86

Я хочу разделить это на 100 шейп-файлов согласно NAME переменная. Итак, я собираюсь group_by, nest и walk вот так.

nc %>% 
  mutate(group = as.character(NAME)) %>% 
  group_by(group) %>%
  nest() %>% 
  mutate(data = map(data, ~st_as_sf(.x))) %>% 
  walk2(.x = data, .y = group,
       ~st_write(obj = .x,
                 dsn = paste0(.y,
                              ".shp")))

Этот красивый канал возвращает мне следующую ошибку:

Ошибка: может преобразовать grouped_df/tbl_df/tbl/data.frame объект в функцию

1 Ответ

1 голос
/ 29 февраля 2020
nc %>% 
   mutate(group = as.character(NAME)) %>% 
   group_by(group) %>%
   nest() %>% 
   #move walk2 inside mutate as data and group were invisibale for walk2 
   #also no need for data you can ran walk2 directly 
   mutate(#data = map(data, ~st_as_sf(.x)), 
          txt = walk2(.x = data, .y = group, ~st_write(obj = .x, dsn = paste0(.y, ".shp"))))
...