栅格叠加应用于第一个栅格的子集
Raster overlay applied to subset of first raster
我有两个具有相同范围和分辨率的栅格。我想将第二个栅格叠加在第一个栅格上并添加值,但仅将叠加函数应用于第一个栅格的单元格 5.
r <- raster(nrow = 45, ncol = 90)
values(r) <- 1:ncell(r)
r2 <- raster(nrow = 45, ncol = 90)
values(r2) <- 1
像这样。
overlay(r, r2, fun = function(x,y){
x1 <- x[x==5]
return(x1 + y)
})
以你为例,这样的事情正常工作:
library(raster)
mysum <- function(r,r2,value){
v<- r2[r==value]+value
r[r==value] <- v
return(r)
}
y <- mysum(r,r2,5)
对于更大的栅格,可能有更有效的方法,但这很简单,不需要 overlay
在你的问题中不清楚你想要第一个栅格(第一个栅格,第二个栅格,NA?)中不是 5 的像元的值。在这里,我假设您需要第一个栅格的值。
有了 terra
你可以使用 ifel
library(terra)
r1 <- rast(nrow = 10, ncol = 10, xmin=0, xmax=1, ymin=0, ymax=1)
r1 <- init(r1, 1:5)
r2 <- rast(nrow = 10, ncol = 10, xmin=0, xmax=1, ymin=0, ymax=1)
values(r2) <- 10
x <- ifel(r1 == 5, r1 + r2, r1)
plot(x)
或使用 lapp
(~overlay)
f <- function(x, y){
i <- x==5
x[i] <- x[i] + y[i]
return( x)
}
z <- lapp(c(r1, r2), f)
和raster::overlay
library(raster)
rr1 <- raster(nrow = 10, ncol = 10, xmn=0, xmx=1, ymn=0, ymx=1)
values(rr1) <- rep(1:5, 20)
rr2 <- raster(nrow = 10, ncol = 10, xmn=0, xmx=1, ymn=0, ymx=1)
values(rr2) <- 10
xx <- overlay(rr1, rr2, fun =f)
我有两个具有相同范围和分辨率的栅格。我想将第二个栅格叠加在第一个栅格上并添加值,但仅将叠加函数应用于第一个栅格的单元格 5.
r <- raster(nrow = 45, ncol = 90)
values(r) <- 1:ncell(r)
r2 <- raster(nrow = 45, ncol = 90)
values(r2) <- 1
像这样。
overlay(r, r2, fun = function(x,y){
x1 <- x[x==5]
return(x1 + y)
})
以你为例,这样的事情正常工作:
library(raster)
mysum <- function(r,r2,value){
v<- r2[r==value]+value
r[r==value] <- v
return(r)
}
y <- mysum(r,r2,5)
对于更大的栅格,可能有更有效的方法,但这很简单,不需要 overlay
在你的问题中不清楚你想要第一个栅格(第一个栅格,第二个栅格,NA?)中不是 5 的像元的值。在这里,我假设您需要第一个栅格的值。
有了 terra
你可以使用 ifel
library(terra)
r1 <- rast(nrow = 10, ncol = 10, xmin=0, xmax=1, ymin=0, ymax=1)
r1 <- init(r1, 1:5)
r2 <- rast(nrow = 10, ncol = 10, xmin=0, xmax=1, ymin=0, ymax=1)
values(r2) <- 10
x <- ifel(r1 == 5, r1 + r2, r1)
plot(x)
或使用 lapp
(~overlay)
f <- function(x, y){
i <- x==5
x[i] <- x[i] + y[i]
return( x)
}
z <- lapp(c(r1, r2), f)
和raster::overlay
library(raster)
rr1 <- raster(nrow = 10, ncol = 10, xmn=0, xmx=1, ymn=0, ymx=1)
values(rr1) <- rep(1:5, 20)
rr2 <- raster(nrow = 10, ncol = 10, xmn=0, xmx=1, ymn=0, ymx=1)
values(rr2) <- 10
xx <- overlay(rr1, rr2, fun =f)