Как найти среднее значение в каждом полигоне, используя растр и экстракт, но исключая определенные значения - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть глобальный растровый файл, в котором я хочу рассчитать определенную норму применения пестицидов в каждой стране. Растровый файл содержит значения -2 (которые представляют воду), -1.5 (которые представляют пропущенные значения) и -1 (что представляет запрет пестицидов), которые не интересны, и мне нужно исключить их и вычислить среднее значение для всех другие значения.

# My raster file is called rast and has these properties

> rast
class       : RasterLayer 
dimensions  : 1681, 4306, 7238386  (nrow, ncol, ncell)
resolution  : 0.08333333, 0.08333333  (x, y)
extent      : -178.9167, 179.9167, -56.0425, 84.04084  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0 
names       : APR_Corn_2.4.d_2015_L

Так что моя идея состояла в том, чтобы просто заменить все значения <0 в растровом файле на NA, а затем объединить его с многоугольником карты мира, используя Extract и Mean. Вот код: </p>

# Load packages and polygon data
library(raster)
library(maptools)
data(wrld_simpl)

# Replace all the negative values with NA
rast.new = rast
rast.new[rast.new < 0] = NA

# Get the mean applcation rate (kg/ha) for each country
national_mean_apr_extr = raster::extract(rast.new, wrld_simpl, fun = mean, na.rm = TRUE)

Это то, что я получаю

> national_mean_apr_extr

               [,1]
  [1,]          NaN
  [2,] 4.422384e-02
  [3,] 8.333350e-03
  [4,] 3.638522e-02
  [5,] 1.683824e-02
  [6,] 3.001397e-04
  [7,]          NaN
  [8,] 2.022979e-01
  [9,] 4.490954e-02
 [10,]          NaN
 [11,]          NaN
 [12,]          NaN
 [13,]          NaN
 [14,] 1.050294e-02
 [15,] 6.948954e-02

Так что многие значения, которые я получаю, являются NaN, и я не знаю почему.

Если я не делаю шаг по замене всех отрицательных чисел на NA, это, кажется, работает, и я не получаю никаких NaN, но числа, конечно, неверны:

# Get the mean applcation rate (kg/ha) for each country
national_mean_apr_extr = raster::extract(rast, wrld_simpl, fun = mean, na.rm = TRUE)
> national_mean_apr_extr
               [,1]
  [1,] -1.500000000
  [2,] -1.500888377
  [3,] -0.494337678
  [4,] -0.038511559
  [5,] -1.340424282
  [6,] -0.831025496
  [7,] -2.000000000
  [8,] -0.946029966
  [9,] -1.483374534
 [10,] -1.500000000
 [11,] -1.875000000
 [12,] -2.000000000
 [13,] -1.828125000
 [14,] -1.490271067
 [15,] -0.754035134

Есть идеи, почему это?

Редактировать: Я добавил ссылку на растровый файл: http://www.filedropper.com/aprcorn24-d2015l

1 Ответ

1 голос
/ 04 апреля 2020

Очевидными причинами будет то, что все значения для этих стран NA. Для этих стран вы получите

mean(NA, na.rm=TRUE)
#[1] NaN

Так что, похоже, все работает так, как задумано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...