我有一個光柵堆棧和100點。對於每個柵格,我想提取的值,並使用三種不同的比例/緩衝區。提取柵格值於點中用於環路
首先,這裏有三個光柵組合成堆疊
library(raster)
# Make rasters and combine into stack
set.seed(123)
r1 = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r1) = round(runif(ncell(r1),1,100))
r2 = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r2) = round(seq(1:ncell(r1)))
r3 = raster(ncol=1000, nrow=1000, xmn=0, xmx=1000, ymn=0, ymx=1000)
values(r3) = round(runif(ncell(r1),1,5))
RasterStack <- stack(r1, r2, r3)
然後我生成100點作爲SpatialPoints
對象
#make points
Points <- SpatialPoints(data.frame(xPoints = sample(1:1000, 100),
yPoints = sample(1:1000, 100)))
接着,我定義我想要的三個緩衝器來通過環
Scales <- c(60, 500)
爲了更好地描述理想的結果,我會首先只使用一個光柵,而不是RasterStack。下面的代碼定義了將在每個柱處於所述兩個不同的Scales
的r1
提取的值的循環填充的矩陣(輸出)。然後將這些列標記在循環之外。
output <- matrix(ncol = length(Scales), nrow = length(Points))
for(i in 1:length(Scales)) {
output[, i] <- extract(r1, Points, method='simple', buffer=Scales[i], fun=mean)
}
colnames(output) <- paste("r1", Scales, sep = "_")
> head(output)
r1_60 r1_500
[1,] 50.67339 50.42280
[2,] 50.42401 50.42335
[3,] 49.96709 50.44288
[4,] 50.65492 50.52634
[5,] 50.60678 50.43535
[6,] 50.52477 50.48277
我想要這個相同的輸出,但而不是調用單個光柵(例如R 1以上),我想在RasterStack
每個柵格執行此操作。最終的結果將是一個矩陣(或data.frame),其具有兩列用於每個光柵(R1:R3)。如例子中,標籤將對應於相應的規模,這樣的列被標記r1_60, r1_500, r2_60, ... , r3_500.
我覺得嵌套for
循環將在哪裏工作我遍歷RasterStack
並通過Scales
但懷疑有可能是一個更好的辦法。
實際的數據我有20個光柵是由1541和1293 3萬點左右的位置。我也有5個不同的尺度這麼一個嵌套循環for
將花費很長的時間來運行。
加成 以一種不同的方法,我可以用下面的代碼來創建的數據幀,其各自對應於使用給定的緩衝器中的每個層的所提取的值的列表。
output <- list()
for(i in 1:length(Scales)){
output[[i]] <- extract(RasterStack, Points, method='simple', buffer = Scales[i], fun = mean)
names(output)[[i]] <- paste("Buffer", Scales[i], sep = "_")
}
從這個輸出,我怎樣才能使其中每列將被標記爲「layer_buffer號碼」的單個6由100數據幀。例如,layer.1_60,layer.2_60,...,layer.2_500,layer.3_500。
我也可以張貼的首選的新問題。
請在發佈之前測試您的可複製代碼。創建'r2'時沒有定義'r'對象。 –
對不起,疏忽了。錯誤已被修復。 –