问题描述
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 值的外部行和列。