Я пытаюсь tidyr::unnest
столбец списка фрейма данных, содержащий sf
объекты.
Например, после этого блога: http://r.iresmi.net/2019/03/27/open-and-merge-multiple-shapefiles/
Загрузить шейп-файлы
library(tidyverse)
library(sf)
library(fs)
library(httr)
library(leaflet)
# https://fr.actualitix.com/blog/shapefiles-des-departements-de-france.html
url <- c("https://fr.actualitix.com/blog/actgeoshap/73-savoie.zip",
"https://fr.actualitix.com/blog/actgeoshap/74-haute-savoie.zip")
dep <- str_extract(url, "\\d{2}.*$")
list(url, dep) %>%
pwalk(~ GET(.x, write_disk(.y)))
walk(dep, unzip, junkpaths = TRUE, exdir = "shp")
Считать шейп-файлы в общую таблицу и удалить их.
res <- dir_ls("shp", glob = "*.shp") %>%
tibble(fname = .) %>%
mutate(data = map(fname, read_sf)) %>%
unnest(data) %>%
st_as_sf() %>%
st_set_crs(2154)
Однако, это дает ошибку
Error: No common type for `..1$data$geometry` <sfc_POLYGON> and `..2$data$geometry` <sfc_MULTIPOLYGON>.
Может ли tidyr::unnest
использоваться таким образом?
РЕДАКТИРОВАТЬ: используя sf
v 0,8-0
РЕДАКТИРОВАТЬ: Моя цель - развернуть все sf
объекты в столбце списка data
, чтобы все их столбцы присутствовали в новом sf
фрейм данных. то есть
sf1 <- dir_ls("shp", glob = "*.shp") %>%
tibble(fname = .) %>%
mutate(data = map(fname, read_sf)) %>%
pluck(2,1)
sf2 <- dir_ls("shp", glob = "*.shp") %>%
tibble(fname = .) %>%
mutate(data = map(fname, read_sf)) %>%
pluck(2,2)
rbind(sf1, sf2)