2016-03-14 5 views
1

У меня есть значения растровых ячеек с 5 цифрами, но мне нужно избавиться от первого, например, если значение ячейки равно «31345», мне нужно сделать это «1345». Я пытаюсь использовать функцию известково() из пакета растровой сделать это путем вычитания различных чисел из на основе значения растра ячейки (так как они все номера), как это:Изменение значений ячеек из растра

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)))))}) 

Я предполагаю, что это вероятно, является ужасным подходом к проблеме (я не очень хорошо разбираюсь в программировании), тем не менее, я столкнулся с ошибкой, потому что я использую «>» и «<» внутри функции, которую я угадываю. Любые идеи о том, как заставить эти «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 
+0

Я нашел проблему с моим кодом с оператором ifelse, вместо «x> 40000 и <50000» он должен быть «x> 40000 & x <50000 ». Тем не менее, ответ ниже лучше, чем делать то, что я сделал –

ответ

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.

+0

Спасибо, это гораздо лучший способ сделать это! –

Смежные вопросы