我有一个包含26个图层的栅格堆栈,分别代表一年中的不同星期。 在此区域内,我对每个图层的854(均值和sd)的汇总值感兴趣的是不规则形状的多边形。

我相信我已经成功提取了这些价值。 但是,当我尝试将其与面文件合并回时,我没有成功。 我相信extract()函数已经剥离了其识别标准(Name_2)的值。 我尝试将extract()函数的“大列表”输出转换为数据框,但这也不起作用。

有什么建议么?

谢谢。

Brazil0 <- getData('GADM', country='BRA', level=0)
Brazil1 <- getData('GADM', country='BRA', level=1)
Brazil2 <- getData('GADM', country='BRA', level=2)

MinasGerais<-subset(Brazil2, NAME_1 =='Minas Gerais')
e <- extent(MinasGerais) 
MG <- as(Brazil2[Brazil2$NAME_1 == 'Minas Gerais',], 'SpatialPolygons') 
row.names(MG) <- as.character(1:length(MG))

setwd("H:/Brazilian Arbovirus Project/ratsers_EpiWeek")
Precip_2017 <- stack("Precip_2017.tif")

Precip_crop <- crop(Precip_2017, e, snap="out")  
crop<- setValues(Precip_crop, NA) 
Precip_raster <- rasterize(MinasGerais, crop)   
Precip_MG<- mask(x=Precip_crop, mask=Precip_raster)

MG_Municip_mean_2 <- extract(Precip_MG, 
                           MG,
                           method='simple',
                           match.ID=FALSE, 
                           FUN=mean,
                           #sp=TRUE,
                           small=TRUE)  

output=data.frame(MG_Municip_mean_2)

MG_1 <- merge( MinasGerais, MG_Municip_mean_2, by='NAME_2', all=TRUE)
writeOGR(MG_1, getwd(), "MG_Municipalities", driver="ESRI Shapefile", 
check_exists=TRUE, 
overwrite_layer=TRUE)

#1楼 票数:0

对于这种计算,我更喜欢对多边形进行栅格化,而不是使用extract() ,将这种方法用于多层栅格非常容易。

有一个可重现的示例:

library(sp)
library(raster)
library(dplyr)

Brazil0 <- getData('GADM', country='BRA', level=0)
Brazil1 <- getData('GADM', country='BRA', level=1)
Brazil2 <- getData('GADM', country='BRA', level=2)

set.seed(123)

r <- raster(ext = extent(Brazil0@bbox))

rList <- list()

for(i in 1:26){
  rList[[i]] <- setValues(r,values = rnorm(n = ncell(r)))
}

rs <- stack(rList)

上面的代码创建了一个具有随机值的多层栅格,现在是时候栅格化并创建一个data.frame进行计算了:

B0r <- rasterize(Brazil0,r,'OBJECTID')
B1r <- rasterize(Brazil1,r,'OBJECTID')
B2r <- rasterize(Brazil2,r,'OBJECTID')

df <- as.data.frame(stack(B0r,B1r,B2r,rs))

names(df)[1:3] <- paste0('level',0:2)

names(df)[4:29] <- paste0('week',1:26)

在此示例中,我将使用Brazil2多边形,在这种情况下,存在的多边形小于1个像素,因此并非所有的多边形都具有信息(也许您正在使用更好的空间分辨率)。 使用dplyr软件包,您可以轻松地为每个多边形计算任何类型的公式,然后合并回属性表:

# example for level2

Brazil2@data <- df %>% select(-c(level0,level1)) %>% group_by(level2) %>%
  summarise_each(funs(mean(., na.rm = TRUE),sd(., na.rm = TRUE))) %>%
  left_join(x=Brazil2@data,by=c('OBJECTID'='level2'))

head(Brazil2)
##   OBJECTID ID_0 ISO NAME_0 ID_1 NAME_1 ID_2          NAME_2 HASC_2 CCN_2 CCA_2    TYPE_2    ENGTYPE_2
## 1        1   33 BRA Brazil    1   Acre    1      Acrelândia           NA       Município Municipality
## 2        2   33 BRA Brazil    1   Acre    2    Assis Brazil           NA       Município Municipality
## 3        3   33 BRA Brazil    1   Acre    3       Brasiléia           NA       Município Municipality
## 4        4   33 BRA Brazil    1   Acre    4          Bujari           NA       Município Municipality
## 5        5   33 BRA Brazil    1   Acre    5        Capixaba           NA       Município Municipality
## 6        6   33 BRA Brazil    1   Acre    6 Cruzeiro do Sul           NA       Município Municipality
##   NL_NAME_2 VARNAME_2  week1_mean  week2_mean week3_mean  week4_mean week5_mean  week6_mean  week7_mean
## 1                      0.02799743  0.65684118 0.18032148  0.15386044  0.5635764  0.13131793  0.66844905
## 2                      0.62831026 -0.46710306 0.56323394  0.16482915 -0.1190538 -0.42822608  0.11841901
## 3                     -0.04441109  0.30017178 0.24697659 -0.44659707  0.1560986  0.08040939  0.11568072
## 4                      0.04773195 -0.18690385 0.03840785 -0.06729135  0.3124202 -0.04866495 -0.38620625
## 5                     -0.18407894  0.21761910 0.30628065  0.11929847 -0.5596950 -0.45436160  0.34162667
## 6                     -0.31508001 -0.07326906 0.19979837 -0.07487962  0.2475976  0.13038549  0.08667631
##    week8_mean  week9_mean week10_mean week11_mean week12_mean week13_mean week14_mean week15_mean
## 1  0.29398763 -0.42470630 -0.39871869 -0.11133687 -0.11600877  0.04953248   0.2538490  -0.6387728
## 2  0.43123080 -0.19684622 -0.52333000  0.48386358  0.30651641  0.02512788  -0.0629341  -0.3729230
## 3 -0.36615371  0.26210474 -0.30212885 -0.15083871 -0.07095279 -0.11673077  -0.4448210   0.2400551
## 4 -0.12058451 -0.07914649  0.07276792  0.08345732 -0.17132937 -0.25823307  -0.1630691  -0.3555612
## 5 -1.28023743 -0.43201474 -0.92807227  0.32306609  0.76073801  0.50142559   0.7291509   0.6027042
## 6  0.08928839 -0.23224347  0.10913390  0.35135734  0.04670324  0.09490760   0.3855241   0.1820617
##   week16_mean week17_mean week18_mean  week19_mean week20_mean week21_mean week22_mean week23_mean
## 1  0.62806442 -0.23251001  0.41445121 -0.357856979  0.06260211  0.25732954 -0.08781137  0.33854357
## 2 -0.45495979 -0.05871667 -0.09732541 -0.131669502 -0.08885639 -0.48216217 -0.11940655 -0.52798951
## 3  0.31939261 -0.19266620  0.08671799  0.241000093  0.14864434  0.07044010  0.47460312  0.07706955
## 4  0.08420384 -0.35656266 -0.18245677  0.008064379  0.07319371  0.09271722 -0.13242697  0.29805436
## 5  0.62892059 -0.07006391  0.41960685  0.167582501  0.10296624  0.07797158  0.03335396  0.20283157
## 6  0.26078806  0.16028080  0.31722646 -0.166467152  0.25832317 -0.13020199 -0.05083594 -0.07325540
##   week24_mean week25_mean week26_mean  week1_sd  week2_sd  week3_sd  week4_sd  week5_sd  week6_sd
## 1   1.0375927  0.05829013 -0.08900512 0.5039079 0.7364619 0.6436874 1.1242115 0.8373088 1.2155468
## 2   0.5672509  0.44157869 -0.45395791 0.6429615 0.6969150 1.2544599 1.1263861 0.8122241 0.9647385
## 3  -0.3314678 -0.16537211  0.27106228 1.2177288 0.7593655 0.9915033 1.0651381 0.8324841 1.1640994
## 4   0.0992971  0.46187201  0.19528712 1.0670819 0.5727231 0.9797493 0.9037118 1.1892758 0.6578113
## 5  -0.5825252 -0.24512778  0.48153479 1.3876316 1.0093498 0.6523201 0.6672334 0.2975399 0.6660514
## 6  -0.1356949 -0.11380037 -0.07519057 0.8528147 1.0521164 0.6692769 0.9140993 1.1120830 0.9439429
##    week7_sd  week8_sd  week9_sd week10_sd week11_sd week12_sd week13_sd week14_sd week15_sd week16_sd
## 1 1.0242434 1.0283737 0.7440292 0.7977511 0.5330551 1.1060657 1.0586667 0.9557767 1.2021589 0.8015805
## 2 0.8650897 1.1318929 0.7925099 0.8416769 0.6735254 1.2130762 1.1684757 1.4122850 1.1372183 1.2514929
## 3 1.0337027 0.9709125 0.7129832 0.7574105 1.3073536 0.8376609 1.1161002 0.8083519 1.2163283 0.9789011
## 4 0.7550593 0.6019020 1.0640847 1.1187340 0.9331608 0.9246086 1.0412971 0.9577963 1.0302680 0.8863142
## 5 1.2286351 0.8620402 0.5704018 1.5840274 0.8929725 0.6766018 0.4504001 0.4747059 0.6959029 1.8061449
## 6 1.1981396 1.0422314 1.0996494 0.7749073 0.7755682 1.2341215 0.9699409 0.8534397 0.8832001 1.1267263
##   week17_sd week18_sd week19_sd week20_sd week21_sd week22_sd week23_sd week24_sd week25_sd week26_sd
## 1 1.7168281 1.3058866 0.7613507 1.4192652 1.0980767 0.5848721 1.1768701 1.2879231 1.1683099 0.8173507
## 2 0.8853379 1.2223339 1.0174595 0.8165643 0.7453179 1.4108344 1.4206444 1.0326178 0.5363038 1.1400113
## 3 0.7980645 1.2271442 1.1425325 0.9385259 1.1597657 1.0255039 1.1598827 0.7623564 0.7854232 0.8780667
## 4 0.9595817 1.1212473 0.8296976 1.1852795 1.2297023 1.0755448 1.0810457 0.8593361 1.0980879 0.7695382
## 5 1.3182950 0.4643851 0.8796118 1.0272719 0.6404252 0.4710161 0.5726681 0.6737512 1.3994816 1.0740231
## 6 1.1344667 0.9216528 1.3398224 0.7941615 1.2181886 1.1101733 1.0151286 1.3209190 1.0377582 1.0426156

  ask by user65148 translate from so

未解决问题?本站智能推荐:

2回复

如何检查栅格和多边形是否重叠?

我有一个栅格,我想检查具有值的单元格是否与我感兴趣的区域重叠,这是一个空间多边形文件。 有没有快速的方法来做到这一点? 我的光栅是这样的: 我试过的: as(extent(r), "SpatialPolygons")在值和 NA 中创建一个多边形。 但我只想检查值部分和研究区域是否重
3回复

分区统计 R(栅格/多边形)

在 R 中,与包 'raster' 中的 'extract' 相比,计算包 'spatialEco' 的函数 'zonal.stats' 中的平均值存在偏差。 对于这两种情况,我使用多边形作为区域字段,并使用栅格作为值。 下面是一个例子: z2和z1偏差的原因是什么?
1回复

基于具有分类和定量值的多边形和栅格的数据提取

我希望,对于 SpatialPolygonsDataFrame polyA 的每个多边形(在我的情况下是来自 wrld_simpl 或 GADM 的世界中的每个国家),以及对于分类栅格 rcat 的每个类别,将另一个栅格的值与定量值 rquant 相加。 最终输出将是一个包含以下列的数据框:国家名称
1回复

在空间栅格上提取样方的平均数据

我将提供一些背景。 我不是 100% 确定我目前为获得我所追求的输出而遵循的路径是正确的,但我使用了一个非常相似的过程来获取每个样方内遥测 ping 的计数数据。 我想要 将我的研究区水道划分为一系列 20 平方米和 50 平方米的样方 然后我想用从生物量栅格中提取的平均生物量值来分配每个样
1回复

通过R中的SpatialPolygonsDataFrame对象列表提取栅格

我试图从单个大文件中提取存储在列表中的R中的各种SpatialPolygonsDataFrames (SPDF)对象的总栅格像元值,然后将提取的值添加到SPDF对象属性表中。 我想重复此过程,但不知道如何进行。 我发现了一个针对单个SPDF对象中存储的多个多边形的有效解决方案(请参阅: ht
2回复

我可以一次一个地提取光栅像素频率,一个多边形一个多边形并保存,以避免在 R 中使我的 RAM 过载吗?

我需要通过 SapatialPolygonsDataFrame 从栅格中提取像素频率,但我的栅格数据量很大,我的个人计算机无法计算它。 所以,如果有什么办法可以在代码中规定我的SapatialPolygonsDataFrame的每个多边形将单独计算并通过ID或名称一一保存在一个DataFrame中
2回复

通过spatialpolygon屏蔽栅格时出错

我有以下功能的光栅: 我想在这个栅格中屏蔽一个点的给定距离内的单元格。 我按如下方式创建空间点: 然后我通过添加0.5缓冲区创建一个空间多边形对象: 给我这个空间对象屏蔽我的光栅时,我有以下错误信息: .polygonsToRaster出错(x,y,field
1回复

使用缓冲功能从栅格中提取xy坐标

我有一些xy坐标作为SpatialPoints(点)对象,并使用它们来从RasterLayer(栅格)中提取这些位置的温度值: 但是,有些点落在栅格图层的外面(即未在陆地上绘图),我想使用buffer参数将每个点周围的半径扩展10000m- 但是我想创建一个数据帧,在该数据帧中,