데이터에 여러 다각형이 포함 된 경우 Spacedman의 탁월한 답변을 완성하려면 다음을 사용하는 코드가 있습니다 dplyr
.
library(dplyr)
library(ggplot2)
library(sp)
## use data from ggplot2:::geom_polygon example:
positions <- data.frame(id = rep(factor(c("1.1", "2.1", "1.2", "2.2", "1.3", "2.3")), each = 4),
x = c(2, 1, 1.1, 2.2, 1, 0, 0.3, 1.1, 2.2, 1.1, 1.2, 2.5, 1.1, 0.3,
0.5, 1.2, 2.5, 1.2, 1.3, 2.7, 1.2, 0.5, 0.6, 1.3),
y = c(-0.5, 0, 1, 0.5, 0, 0.5, 1.5, 1, 0.5, 1, 2.1, 1.7, 1, 1.5,
2.2, 2.1, 1.7, 2.1, 3.2, 2.8, 2.1, 2.2, 3.3, 3.2)) %>% as.tbl
df_to_spp <- positions %>%
group_by(id) %>%
do(poly=select(., x, y) %>%Polygon()) %>%
rowwise() %>%
do(polys=Polygons(list(.$poly),.$id)) %>%
{SpatialPolygons(.$polys)}
## plot it
plot(df_to_spp)
재미 ggplot2
를 위해 초기 데이터 프레임 을 사용하여 얻은 플롯과 비교할 수 있습니다 .
ggplot(positions) +
geom_polygon(aes(x=x, y=y, group=id), colour="black", fill=NA)
위의 코드는 id 당 하나의 polyogn 만 있다고 가정합니다. 일부 ID에 다각형이 분리되어 있으면 데이터 세트에 다른 열을 먼저 추가해야합니다. 먼저 group_by
하위 ID를 사용하고 group_by(upper-id)
대신rowwise
purrr::map
함수를 사용하는 동일한 코드 :
df_to_spp <- positions %>%
nest(-id) %>%
mutate(Poly=purrr::map(data, ~select(., x, y) %>% Polygon()),
polys=map2(Poly, id, ~Polygons(list(.x),.y))) %>%
{SpatialPolygons(.$polys)}