从栅格中提取一些值作为矩阵,进行转换并将转换后的值放回原来的位置

Extracting some values from raster as a matrix, doing a transformation and putting the transformed values to their original place

假设我有一个光栅图像 x:

library(raster)
x = raster(ncol=10, nrow=10, vals = c(rep(NA, 10), rnorm(80), rep(NA, 10)))

现在我将不属于 NA 的行和列转换为 matrix

x_mat = raster::as.matrix(x)
x_mat_complete = x_mat[complete.cases(x_mat),]

这里我对矩阵做一些修改x_mat_complete:

x_mat_complete_modified = x_mat_complete + 1

现在,我想要的是将 x_mat_complete_modified 放回其在原始光栅图像 x 中的位置,使 NA 像素保持不变。我不知道该怎么做。

换句话说,我想在光栅图像 x 中用 x_mat_complete_modified 替换 x_mat_complete,保持所有 NA 不变。

您想要做的事情似乎有点不确定 --- 可能有更好的方法来避免创建矩阵,但这里有一个解决方案。

示例数据稍作改动,以更好地说明完整案例的作用(删除至少包含一个 NA 的所有行)

library(raster)
set.seed(1)
x = raster(ncols=10, nrows=10, vals = c(rep(NA, 8), rnorm(84), rep(NA, 8)))   
x_mat = raster::as.matrix(x)

解决方案

i = complete.cases(x_mat)
cc = x_mat[i,]
x[which(i),] = cc + 10

使用您的示例数据,您可以做到

set.seed(1)
x = raster(ncols=10, nrows=10, vals = c(rep(NA, 10), rnorm(80), rep(NA, 10)))   
y <- x + 10

请参阅 trim 删除具有 NA 值的外部行和列。