我正在尝试编写随机分配例程的脚本。采样设计的区域分为多个多边形或多层。一组但不同数量的样本将被随机分配给每个层(最少2个样本,但在某些层中多达7个)。因此,我有一个分层的shapefile,在它的'属性表中,分层名称和每个所需的样本数。
我在这些类型的抽样设计(http://casoilresource.lawr.ucdavis.edu/drupal/book/export/html/519)上找到了一些很好的文档,尽管我在根据自己的需要实施例程时遇到了一些问题。在此链接之后,我一直在使用rgdal和maptools包。我的工作脚本如下:
# read in strata boundary shapefile
strataboundaries <- readOGR('strataboundaries.shp', layer='strataboundaries')
#sample allocation to strata
allocation <- sapply(slot(strataboundaries, 'polygons'), function(i) spsample(i, n=4, type='random'))
allocation.merge <- do.call('rbind', allocation)
stratumID <- sapply(slot(strataboundaries, 'polygons'), function(i) slot(i, 'ID'))
sample <- sapply(allocation, function(i) nrow(i@coords))
sampleID <- rep(stratumID, sample)
allocation.final <- SpatialPointsDataFrame(allocation.merge,
data=data.frame(poly_id=sampleID))
plot(strataboundaries, col="lightcyan", bborder="black", axes=TRUE, bg="lightsteelblue1")
points(allocation.final, col="red", pch=3, cex=0.8)
#write out shapefile containing sampling locations
allocation.final@proj4string <- strataboundaries@proj4string
writeOGR(allocation.final, ".", "allocation", driver='ESRI Shapefile')
然而,每层的采样强度不是静态的(我有n = 4)。我需要这个来反映属性表中的列,它表示给定层所需的样本数量。我还想将分层名称分配回已分配的采样位置。
理想情况下,例程将迭代每个多边形并随机分配n个样本(如属性表中所示)并写为shapefile。任何方向将不胜感激。我对这个项目比较陌生,所以如果我错过了一些明显的东西,我会道歉。
[1] "SpatialPolygonsDataFrame"
attr(,"package")
[1] "sp"
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots
..@ data :'data.frame': 66 obs. of 3 variables:
.. ..$ OBJECTID_1: int [1:66] 1 2 3 4 5 6 7 8 9 10 ...
.. ..$ Stratum1 : Factor w/ 66 levels "440","441","442",..: 65 64 63 62 61 60 12 11 7 49 ...
.. ..$ Primary : int [1:66] 2 2 4 5 2 7 2 2 2 2 ...
..@ polygons :List of 66
.. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots
.. .. .. ..@ Polygons :List of 1
.. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots
.. .. .. .. .. .. ..@ labpt : num [1:2] -68.3 40.4
.. .. .. .. .. .. ..@ area : num 0.769
.. .. .. .. .. .. ..@ hole : logi FALSE
.. .. .. .. .. .. ..@ ringDir: int 1
.. .. .. .. .. .. ..@ coords : num [1:654, 1:2] -66.3 -66.3 -66.4 -66.4 -66.4 ...
.. .. .. ..@ plotOrder: int 1
.. .. .. ..@ labpt : num [1:2] -68.3 40.4
.. .. .. ..@ ID : chr "0"
.. .. .. ..@ area : num 0.769
答案 0 :(得分:0)
不幸的是,我无法帮助您在不打开shapefile的情况下进行适当的采样。但是,让我给你一些建议,这可能会有所帮助:
希望我能帮助你更进一步。