[英]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.call
将stack
应用于过滤后的列表:
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.