Recortar mapa sf en R
Estoy tratando de trazar todos los ríos de la Península Ibérica como se puede ver en la imagen, pero el shapefile incluye las Islas Canarias e información sobre el norte de África. Para graficarlo usé:
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)
El archivo de forma se puede descargar desdehttps://www.dropbox.com/s/gqoz9xppf4bjwt2/bcn500_0301l_hidrografia.shp?dl=0

rios <- rios %>%
drop_na()
he tratado de usar
rios <- st_crop(rios, c(xmin= -9.80, ymin = 27.68933, xmax = 4.837648, ymax = 35.95))
Pero lo que obtuve fueron solo unos pocos ríos del norte de África, como muestra la trama.

Pero no sé cómo borrar toda la información de Canarias. Mi objetivo final es esta parcela al norte de lat. 35,95 y hasta largo -9,80 así que puedo sacar algo como esta imagen es la misma que la del cuadrado rojo).

¿Alguna sugerencia?
Respuestas
Su extensión de recorte, específicamente ymin
y ymax
es incorrecta. En el código que mostraste, solo recortaste la parte africana. Esto debería cosechar a la Península Ibérica:
rios <- st_crop(rios, c(xmin= -9.80, ymin = 36, xmax = 4.837648, ymax = 44))
Recortar, como ha visto, corta las entidades a un cuadro delimitador cuadrado; st_intersection
hace un clip a lo largo del límite de la capa de recorte, en su caso, filtraría las islas y luego las intersecaría:
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)