通过匹配文件名字符串对多个栅格进行栅格数学计算

问题描述 投票:0回答:1

我有一组栅格,我想使用简单的栅格数学从另一组栅格中减去,但在将正确的栅格与其伙伴匹配时遇到困难。

library(terra)

可以在两个栅格之间轻松进行简单的栅格数学运算:

s <- rast(ncols = 22, nrows = 25, nlyrs = 1, xmin = 0, vals = 10)
p <- rast(ncols = 22, nrows = 25, nlyrs = 1, xmin = 0, vals = 8)

r <- s - p

但是,我在一个文件夹中有一系列许多栅格,并且希望对许多栅格进行数学计算,通过匹配文件名中的字符串将它们与正确的伙伴配对。

我的文件看起来与此类似:

above_a.tif
above_b.tif
above_c.tif

below_a.tif
below_b.tif
below_c.tif

我想根据名称末尾的匹配字符串,从所有“上方”栅格中减去所有“下方”栅格。例如,我想从上面_b.tif 中减去下面_b.tif 。

我已尝试以下方法来执行此操作,但这些代码没有执行其需要的操作: 首先,列出两种文件类型,效果很好:

list_above <- list.files(pattern = 'above', all.files = T, full.names = F)

list_below <- list.files(pattern = 'below', all.files = T, full.names = F) 

然后,我尝试减去它们,但无法弄清楚如何合并我想通过匹配文件名字符串来配对它们的事实:

temp_sub <- lapply(list_above, function(x) {
  to_subtract <- list_below
  subtracted <- x - to_subtract
  subtracted
})

以前有人这样做过吗?这似乎是大型空间数据集经常发生的事情。也许您将其放入某种有组织的光栅堆栈中?

r raster spatial r-raster terra
1个回答
1
投票

f_above <- list.files(pattern = 'above', all.files = T, full.names = F)
f_below <- list.files(pattern = 'below', all.files = T, full.names = F)

假设栅格都具有相同的范围和分辨率,你可以这样做

library(terra)
above <- rast(f_above)
below <- rast(f_below)
x <- above - below

如果光栅未对齐,你可以这样做

y <- lapply(1:length(f_above), \(i) {
         rast(f_above[i]) - rast(f_below[i])
      })
© www.soinside.com 2019 - 2024. All rights reserved.