更改栅格中的单元格值

时间:2016-03-14 17:45:17

标签: r replace raster

我有5位数的栅格单元格值,但我需要摆脱第一个,例如,如果单元格值为“31345”,我需要将其设为“1345”。 我试图使用栅格包中的calc()函数通过从栅格单元格值中减去不同的数字来实现这一点(因为它们都是数字),如下所示:

correct.grid <- calc(grid, fun=function(x){ifelse(x < 40000, x-30000,
                                          ifelse(x > 40000 & < 50000, x-40000,
                                                 ifelse(x > 50000 & < 60000, x-50000,
                                                        ifelse(x > 60000, x-60000, 0)))))})

我想这可能是解决问题的一种可怕方法(我不擅长编程),但是,我遇到了错误,因为我使用的是“&gt;”和“&lt;”在我猜的功能里面。关于如何使这些“ifelse”工作或者更聪明地解决问题的任何想法?

如果有帮助,这是我数据中的一个独特值:

> unique(grid)
  [1] 30057 30084 30207 30230 30235 30237 30280 30283 30311 30319 30320 30326 30350 30351 30352 30360
 [17] 30384 30396 30415 30420 30447 30449 30452 30456 30478 30481 30497 30507 30522 30560 30562 30605
 [33] 30606 30612 30638 30639 30645 30654 30657 30658 30662 30665 30678 30682 30701 30707 30714 30736
 [49] 30740 30743 30749 30750 30823 30824 30841 30852 30862 30892 30896 30898 30915 30920 30928 30934
 [65] 30956 30962 30978 30986 30998 31021 31022 31031 31042 31053 31055 31081 31085 31092 31097 31099
 [81] 31114 31115 31122 31126 31129 31130 31131 31141 31157 31168 31171 40019 40026 40075 40197 40217
 [97] 50342 50360 50379 50496 50720 50725 50732 50766 50798 50837 51073 51092 51397 53096 53110 53117
[113] 53118 53120 53124 60003 60005 60041 60485 60516 60655 60661 60825 61039 61174 61185 61187 61210
[129] 61221 61224 61227 61259 61287 61289 61290 61295

1 个答案:

答案 0 :(得分:2)

如果您只想删除每个值的最左边数字,请执行以下操作:

首先,让我们加载一个栅格对象来使用:

library(raster)

# Load a raster object to work with
grid = system.file("external/test.grd", package="raster")
grid = raster(grid)

# Set up values to be whole numbers
values(grid) = round(values(grid)*100)

现在,从栅格中的每个值中删除最左边的数字:

values(grid) = as.numeric(substr(values(grid), 2, nchar(values(grid))))

请注意,在最左边的数字后面会有一个或多个零的值会缩短一个以上的数字。例如,60661将变为661,而30001将变为1.