繁体   English   中英

如何自动从R中的栅格堆栈中删除空栅格?

[英]How to automatically remove an empty raster from a rasterstack in r?

在我的研究中,我创建了一个有很多冰的区域的卫星数据栅格堆栈,因此,许多图像完全被NA填充。 这些我想自动从堆栈中删除。

假设我有一个栅格堆栈,

r <- raster(nrow=10, ncol=10)
s1 <- s2<- list()
for (i in 1:12) {
  s1[i] <- setValues(r, rnorm(ncell(r), i, 3) )
  s2[i] <- setValues(r, rnorm(ncell(r), i, 3) )
}
s1 <- stack(s1)
s3 <- subset(s1,1) 
s3[] <- NA
s2 <- stack(s2)

# regression of values in one brick (or stack) with another
s <- stack(s1,s3, s2)

中间的图像(图像13)完全不适用,现在我可以使用subset函数将其删除,但是如何获得r以自动删除该层,所以得到的结果与;

s_no_na <- stack(s1,s2)

这是另一种方法。 如果所有值均为NA ,则最小值也为NA 因此,您可以执行以下操作:

 i <- !is.na(minValue(s))
 s_no_na <- s[[i]]

如果知道minValue,这可能会非常快(否则需要计算)。

“自动”是什么意思? 您必须对此进行测试。

尝试使用!any(is.na(values(s)))all(is.na(values(s)))类的东西测试每个栅格,其中s是栅格。 将其循环放入构建最终堆栈的函数中。

如果要使用单线,则使用“ Filter从列表中选择,然后执行do.callstack应用于过滤后的列表:

sf = do.call(stack, Filter(function(e){!all(is.na(values(e)))},list(s1,s3,s2)))

我更喜欢这种方法,它有点简短和甜美:

result <- rasters[!sapply(rasters, is.null)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM