如何根据 R 中的要素名称将一个空间数据集子集化为多个空间数据集



我有一个包含 115 个线要素的空间数据集折线,我试图弄清楚是否可以使用循环或类似函数选择每个线要素并将其保存到单独的形状文件中?

我了解如何使用子集单独执行此操作(下面的示例(,但是重复此过程 115 次似乎是浪费时间和 R 的强大功能。

我包括以下数据的示例:

trailname <- ("trail1", "trail2", "trail3")
trailtype <- ("mountain", "flat", "hilly")
parking <- ("no", "yes", "no")
shapelength <- ("835", "5728", "367")
trails <- data.frame(accessname, trailtype, parking, shapelength)

下面是一个子集示例:

trail1 <- subset(trails, trailname == "trail1")

我想选择每条线索,并将其保存为"线索名称"列下显示的名称,即 trail1.shp

在基本 R 中,您不能在 for 循环中使用assign函数来执行此操作吗?

trailname <- c("trail1", "trail2", "trail3")
trailtype <- c("mountain", "flat", "hilly")
parking <- c("no", "yes", "no")
shapelength <- c("835", "5728", "367")
trails <- data.frame(trailname, trailtype, parking, shapelength)

for(i in 1:nrow(trails)){
name <- as.character(trails$trailname[[i]])
assign( name, subset(trails, trailname == trails$trailname[[i]]) )
}

编辑以回答OP的评论

这应该可以通过一些调整来实现。需要注意的一点是,您提供的示例是一个数据框,而writeOGR函数采用...

sp 包中定义的空间点数据帧、空间线数据帧或空间多边形数据帧对象。

这些类型的对象具有数据框,但也具有可能感兴趣的其他属性。假设您的数据属于这些可接受的类型之一。我将使用rgdal城市数据作为示例。如果我们只关心将文件保存在 R 会话之外,则跳过assign函数并将subset放入writeOGR函数中:

library('rgdal')
#loading in data
cities <- readOGR(system.file("vectors", package = "rgdal")[1], "cities")
#taking only first two rows for this example
shap <- cities[1:2,]
#where you want to save these files. This places it on your current working directory
location <- getwd()[[1]]
for(i in 1:nrow(shap)){
# name of file
name <- as.character(shap$NAME[[i]])
# change shap to your 'SpatialPointsDataFrame' 
writeOGR(subset(shap, NAME == shap$NAME[[i]]), location, name , driver="ESRI Shapefile")
}

有一个名为 ShapePattern 的 R 包。查找函数 shpsplitter。似乎做你想做的事。否则,您可以在其他GIS软件中执行此操作,请参阅此处 https://gis.stackexchange.com/questions/25709/splitting-shapefile-into-separate-files-for-each-feature-using-qgis-gdal-saga

最新更新