2015-10-14 40 views
2

如果有三個光柵(作爲基體):如何插入柵格之間?

r1 <- raster(nrows=10, ncols=10); r1 <- setValues(r1, 1:ncell(r1)) 
r16 <- raster(nrows=10, ncols=10);r16 <- setValues(r16, 1:ncell(r16)) 
r30 <- raster(nrows=10, ncols=10);r30 <- setValues(r30, 1:ncell(r30)) 

我想線性插入r1,c16,c30找到即r2,r3,r4,......r15 then r17,r18,r19,..........r29之間的值。

這可能使用R?

+0

'1:ncell(r)'中的'r'是什麼? – nicola

回答

3

這裏是一個辦法做到這一點

library(raster) 
r <- raster(nrows=10, ncols=10); 
values(r) <- NA 

x <- sapply(1:30, function(...) r) 
x[[1]] <- setValues(r, runif(ncell(r))) 
x[[16]] <- setValues(r, runif(ncell(r))) + 10 
x[[30]] <- setValues(r, runif(ncell(r))) + 20 

s <- stack(x) 

z <- approxNA(s) 

plot(z) 
plot(1:30, z[1]) 

這裏是另一種方式來做到這一點

library(raster) 
r <- raster(nrows=10, ncols=10); 
x1 <- setValues(r, runif(ncell(r))) 
x16 <- setValues(r, runif(ncell(r))) + 10 
x30 <- setValues(r, runif(ncell(r))) + 20 

s <- stack(x1, x16, x30) 
x <- calc(s, fun=function(y) approx(c(1,16,30), y, 1:30)$y) 

但如果有NA在三層值,這將失敗。您需要調整功能fun來處理該問題(這裏是一個example)。

+1

好吧,這似乎使[這個怪物](https://github.com/johnbaums/things/blob/aae7fe671211dc3a4ca8fe6f3da71c28bad448be/R/interpolate_linear.R)或多或少是多餘的。 – jbaums

+1

@jbaums你的函數的主要問題是它不向後推斷。例如,如果我有一個從20月1月開始的一年數據,並且我想整年/一年的額外數據,那麼您的功能將不起作用。 – temor

+0

@temor - 這是真的(我在文檔的詳細信息部分提到它)。 – jbaums