Ritagliare la mappa sf in R
Sto cercando di tracciare tutti i fiumi della penisola iberica come si può vedere nell'immagine, ma lo shapefile include le Isole Canarie e informazioni sul Nord Africa. Per tracciarlo ho usato:
library(sf)
library(tidyverse)
rios <- st_read("/Users/JMFR/Downloads/BCN500/BCN500_0301L_HIDROGRAFIA.shp")
ggplot() +
borders("world", c("spain", "portugal"), fill = "lightsteelblue") +
geom_sf(data = rios)
Il file di forma può essere scaricato dahttps://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

rios <- rios %>%
drop_na()
ho provato ad usare
rios <- st_crop(rios, c(xmin= -9.80, ymin = 27.68933, xmax = 4.837648, ymax = 35.95))
Ma quello che ho ottenuto sono stati solo alcuni fiumi del Nord Africa, come mostra la trama.

Ma non so come eliminare tutte le informazioni dalle Isole Canarie. Il mio obiettivo finale è questo terreno a nord di lat. 35.95 e fino a lungo -9.80 quindi posso ottenere qualcosa in quanto questa immagine è la stessa che dal quadrato rosso).

Eventuali suggerimenti?
Risposte
La tua estensione di ritaglio, in particolare ymin
ed ymax
è sbagliata. Nel codice che hai mostrato hai ritagliato solo la parte africana. Questo dovrebbe ritagliarsi nella penisola iberica:
rios <- st_crop(rios, c(xmin= -9.80, ymin = 36, xmax = 4.837648, ymax = 44))
Il ritaglio, come hai visto, taglia le caratteristiche in un rettangolo di delimitazione quadrato; st_intersection
crea una clip lungo il confine del livello di ritaglio, nel tuo caso, filtrerei le isole e poi le intersecherei:
library(ggplot2)
library(raster)
library(sf)
library(dplyr)
esp = getData(country = "ESP", level = 1)
esp = esp %>% st_as_sf() %>% filter(!NAME_1 %in% c("Islas Canarias", "Islas Baleares"))
rios = st_read("/Users/JMFR/Downloads/BCN500/BCN500_0301L_HIDROGRAFIA.shp")
rios = st_intersection(rios, esp)