2017-08-16 5 views
0

私は年の異なる週を表す26のレイヤーを持つラスタースタックを持っています。この領域には、854個の不規則な形状のポリゴンがあり、各レイヤーの要約値(平均とsd)に関心があります。Raster Stackの各レイヤーのポリゴン間の値の要約 - シェープファイルと値をマージする方法は?

私はこれらの値を正常に抽出したと信じています。しかし、それらをポリゴンファイルにマージしようとすると、私はうまくいかない。私はextract()関数がその識別基準(Name_2)の値を取り除いたと考えています。私はextract()関数からの "大きなリスト"の出力をデータフレームに変換しようとしましたが、それもうまくいきませんでした。

提案がありますか?

ありがとうございます。私はポリゴンをラスタライズではなく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) 
+0

あなたは「あなたがこれらの値を抽出していると考えている」と言うとき、あなたはコードをデバッグすることによってこれを確認しています、またはあなたはちょうどそれが動作すると仮定していますか? – FluffyKitten

+0

dput(Precip_2017)を使用していくつかのサンプルデータを追加できますか?同様のデータを作成しますか?どのパッケージを使用していますか? – minem

答えて

0

、それは多層ラスタのためにこの方法を使用するのはとても簡単です。再現性のある例では

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([email protected])) 

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ピクセルより小さいポリゴンがあるため、すべてのポリゴンに情報があるわけではありません(おそらく、 al解決法)。 dplyrパッケージを使用して、各ポリゴンのために簡単に式のいずれかの種類を計算し、属性テーブルに戻ってマージすることができます:

# example for level2 

[email protected] <- df %>% select(-c(level0,level1)) %>% group_by(level2) %>% 
    summarise_each(funs(mean(., na.rm = TRUE),sd(., na.rm = TRUE))) %>% 
    left_join([email protected],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 
+0

助けてくれてありがとう。これは素晴らしい仕事でした! – user65148

+0

@ user65148ようこそ。これが役に立ったら、回答を受け入れてください –

+0

それを閉じることを意味しますか?それ、どうやったら出来るの? – user65148

関連する問題