【问题标题】:Extracting some values from raster as a matrix, doing a transformation and putting the transformed values to their original place从栅格中提取一些值作为矩阵,进行转换并将转换后的值放到其原始位置
【发布时间】:2021-06-30 15:42:51
【问题描述】:

假设我有一个光栅图像x

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

现在我将不是NAs 的行和列转换成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 替换为x_mat_complete_modified,保持所有NAs 不变。

【问题讨论】:

    标签: r matrix raster r-raster


    【解决方案1】:

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

    稍作改动的示例数据可以更好地说明完整案例的作用(删除所有至少包含一个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 值的外部行和列。

    【讨论】:

    • 我使用的模型要求数据是matrix。因此,我需要以某种方式解决这个问题。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多