从栅格中提取一些值作为矩阵,进行转换并将转换后的值放回原来的位置
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 值的外部行和列。
假设我有一个光栅图像 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 值的外部行和列。