2016-06-08 4 views
2

У меня есть растровый слой со значениями ячеек 0, 0.9 и 1. У меня есть кадр данных, в первом столбце - идентификатор ячейки, а во втором столбце - значение 0.936. (В будущем эти значения во втором столбце могут отличаться, поэтому мне нужно, чтобы конкретная ячейка была заменена соответствующим значением в кадре данных)Функция subs {raster} не работает

В Gen_raster Я хочу заменить значения ячеек ячеек, соответствующих ID new_values ​​[1] со значениями new_values ​​[2].

Я попытался сделать это с помощью функции subs() (растровый пакет), но по какой-то причине значения new_values ​​[1] не соответствуют идентификаторам соты Gen_raster, поэтому ничего не происходит с значениями ячейки Gen_raster.

Я попытался использовать функцию subs() funtion для примера с атрибутами similair (также используя растровый слой и кадр данных с двумя столбцами, 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 не совпадают.

Есть ли у кого-нибудь предложения? Помог бы мне много .. спасибо!

ответ

0

subs соответствует значениям ячеек (0, 0,9, 1) в Gen_raster, с первым столбцом (id) от new_values. Похоже, нет совпадений.

Если я вас понимаю хорошо, что вы после это:

Gen_raster[new_values$id] <- new_values$v 
+0

Да это работает! Большое спасибо за помощь. Но я не понимаю, почему в примере, который я предоставляю с растровым слоем r и dataframe df, этот метод делает то же самое, что и метод, который вы предлагаете, и когда я пытаюсь это сделать для rasterlayer Gen_raster и dataframe new_values, это не работает ... Во всяком случае, спасибо за ответ! – Farilde

+0

Это две довольно разные операции, одна - подстановка на основе значений, другая - на основе индекса. – RobertH

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

  • Нет связанных вопросов^_^