首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纬向统计R

纬向统计R
EN

Stack Overflow用户
提问于 2016-06-03 13:40:16
回答 2查看 2.4K关注 0票数 1

我在R中使用R包,并在栅格上执行包含多个polygons (200)的shapefileextract。每个多边形都有一个列,其中指定多边形的class。当我执行extract时,我得到一个dataframe,其中栅格的每个值都被“分配”给一个多边形:哪个多边形位于哪个像素。但是,我的多边形包含的信息(即是哪些类)消失了。extract之后的数据显示如下所示:

代码语言:javascript
复制
test <- extract(myRaster, myTrainingPolygon, df = TRUE)

ID     band1     band2    band3
1      0.101     0.827    ...
...    ...       ...      ...
200    0.876     0.821    ...

我需要的是

代码语言:javascript
复制
ID     band1     band2    band3    class
1      0.101     0.827    ...      class1
...    ...       ...      ...      ...
200    0.876     ...      ...      class3

当我执行摘录时,我怎样才能获得信息--或者首先--不要丢失这些信息?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-04 19:45:25

始终包括并使用示例数据。

代码语言:javascript
复制
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))

现在我们可以:

代码语言:javascript
复制
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

代码语言:javascript
复制
d <- data.frame(id=rep(1:length(v), sapply(v, length)), value=unlist(v))

(这种使用unlist的特殊方法只适用于单个层)。对于多个层

代码语言:javascript
复制
#d <- data.frame(id=rep(1:length(v), sapply(v, length)), do.call(rbind, v))

使用顺序ID和所需的其他多边形属性创建data.frame

代码语言:javascript
复制
pd <- cbind(id=1:length(p), data.frame(p))

将两者合并

代码语言:javascript
复制
m <- merge(pd, d)
票数 4
EN

Stack Overflow用户

发布于 2016-06-04 00:59:20

?extract指示sp参数控制是否应该将提取的值添加到空间对象的数据中。指定sp=TRUE应该可以做到这一点。例如:

代码语言:javascript
复制
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的(默认)名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37615966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档