我在R中使用R包,并在栅格上执行包含多个polygons (200)的shapefile的extract。每个多边形都有一个列,其中指定多边形的class。当我执行extract时,我得到一个dataframe,其中栅格的每个值都被“分配”给一个多边形:哪个多边形位于哪个像素。但是,我的多边形包含的信息(即是哪些类)消失了。extract之后的数据显示如下所示:
test <- extract(myRaster, myTrainingPolygon, df = TRUE)
ID band1 band2 band3
1 0.101 0.827 ...
... ... ... ...
200 0.876 0.821 ...我需要的是
ID band1 band2 band3 class
1 0.101 0.827 ... class1
... ... ... ... ...
200 0.876 ... ... class3当我执行摘录时,我怎样才能获得信息--或者首先--不要丢失这些信息?!
发布于 2016-06-04 19:45:25
始终包括并使用示例数据。
library(raster)
r <- raster(ncol=36, nrow=18)
r[] <- 1:ncell(r)
cds1 <- rbind(c(-180,-20), c(-160,5), c(-60, 0), c(-160,-60), c(-180,-20))
cds2 <- rbind(c(80,0), c(100,60), c(120,0), c(120,-55), c(80,0))
p <- spPolygons(cds1, cds2)
p <- SpatialPolygonsDataFrame(p, data.frame(class=c('A', 'B'), stringsAsFactors=FALSE))现在我们可以:
v <- extract(r, p)
str(v)
#List of 2
# $ : num [1:38] 326 327 328 329 330 331 332 333 334 335 ...
# $ : num [1:25] 172 173 208 209 244 245 279 280 281 282 ...创建具有多边形顺序ID和提取值的data.frame
d <- data.frame(id=rep(1:length(v), sapply(v, length)), value=unlist(v))(这种使用unlist的特殊方法只适用于单个层)。对于多个层
#d <- data.frame(id=rep(1:length(v), sapply(v, length)), do.call(rbind, v))使用顺序ID和所需的其他多边形属性创建data.frame
pd <- cbind(id=1:length(p), data.frame(p))将两者合并
m <- merge(pd, d)发布于 2016-06-04 00:59:20
?extract指示sp参数控制是否应该将提取的值添加到空间对象的数据中。指定sp=TRUE应该可以做到这一点。例如:
library(maptools)
library(raster)
data(wrld_simpl)
r <- raster(extent(-180, 180, -90, 90), res=10)
r[] <- runif(ncell(r))
wrld_simpl_new <- extract(r, wrld_simpl, fun=mean, sp=TRUE)
head(wrld_simpl_new)
## FIPS ISO2 ISO3 UN NAME AREA POP2005 REGION SUBREGION LON LAT layer
## ATG AC AG ATG 28 Antigua and Barbuda 44 83039 19 29 -61.783 17.078 0.9142067
## DZA AG DZ DZA 12 Algeria 238174 32854159 2 15 2.632 28.163 0.1774097
## AZE AJ AZ AZE 31 Azerbaijan 8260 8352021 142 145 47.395 40.430 0.3098710
## ALB AL AL ALB 8 Albania 2740 3153731 150 39 20.068 41.143 0.3746480
## ARM AM AM ARM 51 Armenia 2820 3017661 142 145 44.563 40.534 0.3494729
## AGO AO AO AGO 24 Angola 124670 16095214 2 17 17.544 -12.296 0.2873931添加的列具有"layer“的名称,因为这是RasterLayer的(默认)名称。
https://stackoverflow.com/questions/37615966
复制相似问题