У меня есть набор данных о происхождении видов, которые я пытаюсь преобразовать в районы залегания путем создания выпуклых оболочек. Я могу сделать это вручную (т. Е. Один вид за раз), но я бы очень хотел иметь возможность автоматически обрабатывать его по названию вида.
Пример уменьшенного набора данных можно найти здесь: https://pastebin.com/dWxEvyUB
Вот как я сейчас делаю это вручную:
library(tidyverse)
library(sf)
library(rgeos)
library(maps)
library(mapview)
library(mapdata)
library(ggplot2)
fd <- read_csv("occurrence.csv")
spA.dist <- fd %>%
filter(species == "sp.A") %>%
dplyr::select(lon,lat) %>%
as.matrix() %>%
coords2Polygons(ID="distribution") %>%
gConvexHull() %>%
gBuffer()
spB.dist <- fd %>%
filter(species == "sp.B") %>%
dplyr::select(lon,lat) %>%
as.matrix() %>%
coords2Polygons(ID="distribution") %>%
gConvexHull() %>%
gBuffer()
wrld2 = st_as_sf(map('world2', plot=F, fill=T))
ggplot() +
geom_sf(data=wrld2, fill='gray20',color="lightgrey",size=0.07) +
geom_polygon(aes(x=long,y=lat,group=group),color="red",data=spA.dist,fill=NA) +
geom_polygon(aes(x=long,y=lat,group=group),color="blue",data=spB.dist,fill=NA) +
coord_sf(xlim=c(100,300), ylim=c(-60,60))
Это отображает карту сОбласти появления двух видов основаны на выпуклой оболочке их наблюдений. Я понимаю, что смешиваю разные пространственные библиотеки, поэтому было бы неплохо сделать все это в sf, если это возможно. В моих реальных данных у меня есть более двух видов, и я могу скопировать и вставить код, который у меня есть для каждого, но кажется, что это должно быть возможно упростить, чтобы многоугольники (и последующие выпуклые оболочки) строились на уровне факторовавтоматически. Нечто подобное:
polys <- st_as_sf(fd) %>%
group_by(species) %>%
magically_make_polygons(lon,lat) %>%
st_convex_hull() %>%
st_buffer()
Я искал несколько дней, а также копался в куче документации. Многие из этих пространственных вещей не интуитивны для меня, поэтому я ожидаю, что мне не хватает базового понимания. Можно ли это сделать?