使用后续图层填充光栅堆栈中的间隙

时间:2016-02-02 18:53:03

标签: r raster

假设我有一个栅格堆栈,每个层都有数据间隙。我想使用堆栈中的下两个层填充每个层的间隙:

(P) xxx-xxx-xxxx • (F) xxx-xxx-xxxx

在这种情况下,r2和r3将用于填补r1中的间隙,等等。

2 个答案:

答案 0 :(得分:2)

不确定这是否是你想要的,但它会给你一个开始。我还是R的新手,所以可能有另一种方法可以做到。

library(raster)
r1 <- raster(ncol=20,nrow=20, xmn=0, xmx=20, ymn=0,ymx=20)
r1[] <- 1:20
r2 <- r3 <- r4 <- r5 <- r1
set.seed(0)
r1[sample(1:ncell(r1), size = 20)] <- NA
r2[sample(1:ncell(r2), size = 30)] <- NA
r3[sample(1:ncell(r3), size = 10)] <- NA
r4[sample(1:ncell(r4), size = 18)] <- NA
r5[sample(1:ncell(r5), size = 18)] <- NA

s <- stack(r1, r2, r3, r4, r5)

for(i in 1:(nlayers(s) - 2) ){
    s[[i]] <- merge( s[[i]], mask( s[[(i+1)]], s[[i]], inverse = TRUE))
    s[[i]] <- merge( s[[i]], mask( s[[(i+2)]], s[[i]], inverse = TRUE))
}

答案 1 :(得分:1)

MikeJewski的解决方案可能有效,但cover功能是为此设计的,更直接。目前尚不清楚如何您希望使用接下来的两个图层。平均值:

for(i in 1:(nlayers(s) - 2) ){
    s[[i]] <- cover( s[[i]], mean( s[[(i+1):(i+2)]], na.rm=TRUE))
}

或者首先是最接近的(如MikeJewski所假设):

for(i in 1:(nlayers(s) - 2) ){
    s[[i]] <- cover( s[[i]], s[[(i+1)]])
    s[[i]] <- cover( s[[i]], s[[(i+2)]])
}

这将是另一种但可能效率低下的方法:

f <- function(x) {
    for(i in 1:((ncol(x)-2)) ){
        x[is.na(x[,i]),i]  <- x[is.na(x[,i]),i+1]  
        x[is.na(x[,i]),i]  <- x[is.na(x[,i]),i+2]  
    }
    x
}

ss <- calc(s, f)