[英]Set single raster to NA where values of raster stack are NA
我有兩個30米x 30米的光柵文件,我想從中采樣點。 在采樣之前,我想從圖像中去除混濁區域。 我轉向R和Hijman的Raster包來完成任務。
使用drawPoly(sp = TRUE)命令,我繪制了18個不同的多邊形。 該函數似乎不允許18個多邊形作為一個sp對象,所以我將它們全部分開繪制。 然后我給多邊形一個與光柵匹配的proj4string,並將它們設置為一個列表。 我通過一個lapply函數運行列表,將它們轉換為柵格(Hijman包中的柵格化函數),多邊形區域設置為NA,圖像的其余部分設置為1。
我的最終目標是一個柵格圖層,其中18個區域設置為NA。 我已經嘗試堆疊光柵化多邊形列表,並將其子集化以將新柵格設置為相同區域中的NA。 我的可重現代碼如下。
library(raster)
r1 <- raster(nrow=50, ncol = 50)
r1[] <- 1
r1[4:10,] <- NA
r2 <- raster(nrow=50, ncol = 50)
r2[] <- 1
r2[9:15,] <- NA
r3 <- raster(nrow=50, ncol = 50)
r3[] <- 1
r3[24:39,] <- NA
r4 <- raster(nrow=50, ncol = 50)
r4[] <- 1
s <- stack(r1, r2, r3)
test.a.cool <- calc(s, function(x){r4[is.na(x)==1] <- NA})
無論出於何種原因,darn testacool都是一個空白圖,我的目標是將它作為一個柵格,除了堆棧中的NA(s)等於1之外的所有值。
有小費嗎?
謝謝。
執行sum(s)
將起作用,因為sum()
為堆棧中甚至一個NA
值的任何網格單元返回NA
。
要查看它是否有效,請比較以下產生的數字:
plot(s)
plot(sum(s))
我也在R-Sig-Geo論壇上發布了這個問題,並收到了包裹作者的回復。 兩個最簡單的解決方案:
使用sp包將我的多邊形轉換為一個,然后柵格化多邊形。
p <- rbind(p1, p2, p3...etc., makeUniqueIDs = TRUE)
r4 <- raster(nrow=50, ncol = 50)
r4[] <- 1
mask <- rasterize(p, r4)
mask[mask %in% 1:18] <- 1
#The above code produces a single raster file with
#my polygons as unique values, ready for masking.
第二個簡單的解決方案,正如Josh O'Brien所指出的那樣:
m <- sum(s)
test <- mask(r4, m)
R社區搖滾。 問題在一小時內解決了(兩次)。 謝謝。
我不熟悉您正在使用的軟件包,但是查看代碼中的最后一行,我認為問題可能出在這里:
function(x){r4[is.na(x)==1] <- NA})
看起來calc
不會對此有很大幫助。 它設置由x
的NA
s索引的r4
的值並將其設置為NA
。
然后怎樣呢? 如果有的話,也許:
function(x){r4[is.na(x)==1] <- NA; return(r4) })
雖然,目前尚不清楚這是否是你所追求的。
你走在正確的軌道上。 [
運算符是為柵格和柵格堆棧定義的,因此您可以使用單行:
r4[ any(is.na(s) ) ] <- NA
plot(r4)
如果你想使用calc
你可以像這樣使用它:
r4 <- calc( s, function(x){ ( ! any( is.na(x) ) ) } )
r4[is.na(r4)] <- NA
plot(r4)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.