subs {raster}功能不起作用

时间:2016-06-08 22:13:32

标签: r dataframe cell raster substitution

我有一个单元格值为0,0.9和1的栅格图层。我有一个数据框,在第一列中包含单元格ID,在第二列中包含值0.936。(将来这些值可能在第二列中因此我需要将特定的单元替换为数据框中的相应值

在Gen_raster中,我想将与new_values [1]的ID匹配的单元格的单元格值替换为值new_values [2]。

我尝试使用subs()函数(raster包)执行此操作,但由于某种原因,值new_values [1]与Gen_raster的单元ID不匹配,因此Gen_raster的单元格值不会发生任何事情。

我尝试使用subs()函数作为similair characterisitcs的例子(也使用栅格图层和带有两列int和num的数据框),这确实有效。这是我使用的代码以及栅格图层和数据框的特征:

Gen_raster1<-subs(Gen_raster, new_values, subsWithNA=FALSE)    

Gen_raster:

    class       : RasterLayer 
    dimensions  : 401, 292, 117092  (nrow, ncol, ncell)
    resolution  : 0.04166667, 0.04166667  (x, y)
    extent      : -79.04166, -66.87499, -4.249997, 12.45834  (xmin, xmax, ymin, ymax)
    coord. ref. : NA 
    data source : in memory
    names       : layer 
    values      : 0, 1  (min, max)

和new_values:

     'data.frame':  50 obs. of  2 variables:
     $ id: int  7444 7446 7735 7745 8331 8924 9185 9473 13261 13554 ...
     $ v : num  0.936 0.936 0.936 0.936 0.936 ...

这是我使用过的例子,它确实起作用了:

    r <- raster(ncol=10, nrow=10)
    r[] <- round(runif(ncell(r)) * 10)
    df <- data.frame(id=2:8, v=c(10.003,10.03,11.006,11,12:14))
    x <- subs(r, df)
    x2 <- subs(r, df, subsWithNA=FALSE)

我看不出这两种方法有什么区别,因此我不明白为什么new_values和Gen_raster的单元ID不匹配..

有人有建议吗?会帮助我很多..谢谢!

1 个答案:

答案 0 :(得分:0)

subs匹配Gen_raster中的单元格值(0,0.9,1),new_values的第一列(id)。看起来没有比赛。

如果我理解你,你所追求的是:

Gen_raster[new_values$id] <- new_values$v