在spatstat中保留多边形属性并将强度结果追加回SpatialPolygonsDataFrame
保留SpatialPolygonsDataFrame属性的spatstat镶嵌表面处理方案
在使用spatstat计算镶嵌表面的点强度时,将SpatialPolygonsDataFrame转为owin再生成tess对象的过程中,原多边形的标签/属性会丢失。以下是两种保留或追加原属性的可行方案:
方案一:基于rgdal的手动属性关联
1. 简化转换流程并保留多边形ID
原代码的拆分转换步骤过于繁琐,可直接提取多边形并命名列表元素,对应原数据的ID:
library(spatstat) library(rgdal) # 读取SpatialPolygonsDataFrame SF <- readOGR(dsn="D:/", layer="sf") # 提取原数据属性表 sf_attr <- SF@data # 获取多边形唯一ID(对应属性表行名) poly_ids <- row.names(sf_attr) # 批量转换多边形为owin并命名列表 winlist <- lapply(SF@polygons, function(p) { as.owin(SpatialPolygons(list(p))) }) names(winlist) <- poly_ids # 创建tess对象并附加原属性表 e <- tess(tiles = winlist, window = as.owin(SF)) e$sf_attributes <- sf_attr
2. 关联强度计算结果与原属性
计算完成后,可直接将强度值与原属性合并:
# B为已创建的ppp点模式对象 QB <- quadratcount(B, tess = e) Qi.B <- intensity(QB) # 合并属性与强度值 result_df <- cbind(sf_attr, intensity = Qi.B)
3. 带标签的可视化(可选)
若需在图中标注原多边形标签,可使用text.owin:
plot(intensity(QB, image=TRUE), las=1, main=NULL) plot(B, pch=20, cex=0.5, col="white", add=TRUE) # 添加多边形ID标签 text.owin(e, labels = poly_ids, cex=0.6)
方案二:使用sf包简化转换(推荐)
rgdal已停止维护,sf包与spatstat兼容性更好,可直接转换并保留所有属性:
library(sf) library(spatstat) # 读取sf格式数据 SF_sf <- st_read(dsn="D:/", layer="sf") # 直接转为tess对象,自动保留原属性 e_sf <- as.tess(SF_sf) # 查看附加的属性 e_sf$marks # 后续强度计算流程不变 QB_sf <- quadratcount(B, tess = e_sf) Qi.B_sf <- intensity(QB_sf)
内容的提问来源于stack exchange,提问作者Sean Basquill
相关产品推荐
相关产品推荐

