Si encuentras algún problema en tu código o trabajo, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
Necesitas summarise
despues de ti group_by
declaración entonces su enfoque funciona perfectamente bien. Directamente desde PUNTOS –> POLÍGONO, y manteniendo el crs (si lo hay).
set.seed(999)
xy = data.frame(x=runif(24), y=runif(24))
xy$ID = rep(1:6, each = 4)
head(xy)
xys = st_as_sf(xy, coords=c("x","y"))
polys = xys %>%
dplyr::group_by(ID) %>%
dplyr::summarise() %>%
st_cast("POLYGON")
plot(polys)
Si quieres el polígono exterior puedes añadir st_convex_hull()
polys = polys %>%
st_convex_hull()
plot(polys)
Haga un ejemplo reproducible:
> set.seed(999)
> xy = data.frame(x=runif(24), y=runif(24))
> xy$ID = rep(c(1:6), rep(4,6))
> head(xy)
x y ID
1 0.38907138 0.8260703 1
2 0.58306072 0.8195141 1
3 0.09466569 0.5684927 1
4 0.85263123 0.6196068 1
5 0.78674676 0.8308805 2
6 0.11934226 0.4588336 2
Convierta el marco de datos en un sf
marco de datos:
> xys = st_as_sf(xy, coords=c("x","y"))
Luego agrega por ID, combina los puntos y lanza a POLYGON, convierte todo en un sf
marco de datos. En una sola línea:
> polys = st_sf(
aggregate(
xys$geometry,
list(xys$ID),
function(g)
st_cast(st_combine(g),"POLYGON")
))
> polys
Simple feature collection with 6 features and 1 field
geometry type: POLYGON
dimension: XY
bbox: xmin: 0.03014558 ymin: 0.01902308 xmax: 0.9875201 ymax: 0.8690149
epsg (SRID): NA
proj4string: NA
Group.1 geometry
1 1 POLYGON ((0.3890714 0.82607...
2 2 POLYGON ((0.7867468 0.83088...
3 3 POLYGON ((0.3907724 0.52724...
4 4 POLYGON ((0.03014558 0.8162...
5 5 POLYGON ((0.1665847 0.10961...
6 6 POLYGON ((0.9074913 0.35951...
Se ve bastante horrible, pero esos son datos aleatorios para ti…
Si posees algún titubeo y capacidad de aclararse nuestro post te recordamos dejar una interpretación y con gusto lo estudiaremos.