在R中迭代空间点和空间多边形数据帧合并

在R中迭代空间点和空间多边形数据帧合并,r,for-loop,polygon,spatial,R,For Loop,Polygon,Spatial,我正在尝试迭代创建空间多边形数据帧列表的质心的过程(每个帧中有多个多边形特征),得到的空间点保留父多边形的属性(数据)。我尝试了sp::over函数,但它似乎有问题,因为质心不一定与父多边形重叠。此外,我还不熟悉编码/R,不知道如何在for循环和/或使用apply功能中实现这一点 具体来说,我需要(1)找到一个不同的函数,将空间多边形数据帧与相关的空间点(质心)链接起来;(2)迭代整个过程,并将空间多边形数据帧数据与相应的空间点合并-我不知道如何在运行循环时将一个列表的索引值与另一个列表的索引值

我正在尝试迭代创建
空间多边形数据帧列表的质心的过程(每个帧中有多个多边形特征),得到的
空间点
保留父多边形的属性(数据)。我尝试了
sp::over
函数,但它似乎有问题,因为质心不一定与父多边形重叠。此外,我还不熟悉编码/R,不知道如何在
for
循环和/或使用
apply
功能中实现这一点

具体来说,我需要(1)找到一个不同的函数,将
空间多边形数据帧
与相关的
空间点
(质心)链接起来;(2)迭代整个过程,并将
空间多边形数据帧
数据与相应的
空间点
合并-我不知道如何在运行循环时将一个列表的索引值与另一个列表的索引值相匹配

以下是单个
SpatialPolygonsDataFrames
对象的可复制示例,显示使用
sp::over
无效,因为某些质心不会与父多边形重叠:

library(maptools)  ## For wrld_simpl
library(sp)

## Example SpatialPolygonsDataFrames (SPDF)
data(wrld_simpl) #polygon of world countries
spdf1 <- wrld_simpl[1:25,] #country subset 1
spdf2 <- wrld_simpl[26:36,] #subset 2
spdf3 <- wrld_simpl[36:50,] #subset 3

spdfl[[1]]@data


#plot, so you can see it
plot(spdf1)    
plot(spdf2, add=TRUE, col=4) 
plot(spdf3, add=TRUE, col=3) 

#make list of SPDF objects
spdfl<-list()
spdfl[[1]]<-spdf1
spdfl[[2]]<-spdf2
spdfl[[2]]<-spdf3

#create polygon centroids for each polygon feature (country) within spdfl[[1]]
spdf1c <- gCentroid(spdfl[[1]], byid=TRUE)
plot(spdfl[[1]])
plot(spdf1c, add=TRUE)

#add attributes 'NAME' and 'AREA' to SpatialPoints (centroid) object from SPDF data
spdf.NAME <- over(spdf1c, spdfl[[1]][,"NAME"])
spdf.AREA <- over(spdf1c, spdfl[[1]][,"AREA"])
spdf1c$NAME <- spdf.NAME
spdf1c$AREA <- spdf.AREA

spdf1c@data   
#`sp::over` output error = name and area for ATG, ASM, BHS, and SLB are missing
library(maptools)###用于wrld\u siml
图书馆(sp)
##空间多边形数据帧(SPDF)示例
世界各国的数据(wrld#U simpl)#多边形

spdf1我发现
SF
是在R中处理空间数据的一个很棒的包。我已经修复了一些拼写错误,并在下面添加了右for循环

library(maptools)  ## For wrld_simpl
library(sp)
library(sf)


## Example SpatialPolygonsDataFrames (SPDF)

data(wrld_simpl) #polygon of world countries
spdf1 <- wrld_simpl[1:25,] #country subset 1
spdf2 <- wrld_simpl[26:36,] #subset 2
spdf3 <- wrld_simpl[36:50,] #subset 3

spdfl[[1]]@data


#plot, so you can see it
plot(spdf1)    
plot(spdf2, add=TRUE, col=4) 
plot(spdf3, add=TRUE, col=3) 

#make list of SPDF objects
spdfl<-list()
spdfl[[1]]<-spdf1
spdfl[[2]]<-spdf2
spdfl[[3]]<-spdf3

# Empty List for Centroids
centres <-list()

# For Loop
for (i in 1:length(spdfl)) {
  centres[[i]] <- spdfl[[i]] %>% 
    sf::st_as_sf() %>%          # translate to SF object
    sf::st_centroid() %>%       # get centroids 
    as(.,'Spatial')   # If you want to keep as SF objects remove this line

}


#Plot your Spatial Objects
plot(spdfl[[1]])
plot(centres[[1]], add=TRUE)
library(maptools)###用于wrld\u siml
图书馆(sp)
图书馆(sf)
##空间多边形数据帧(SPDF)示例
世界各国的数据(wrld#U simpl)#多边形

非常感谢@Michael.Brian.Gordon!工作起来很有魅力。