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

问题描述

假设我有一个光栅图像 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_mat_complete 中的 x_mat_complete_modified 替换为 x,保持所有 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,10),rnorm(80),10)))   
y <- x + 10

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