Изменение размера матрицы с координатами широты/долготы до большего предопределенного размера сетки с использованием среднего значения в R

Прежде всего мои извинения, если это обсуждается в другом месте; может быть, я использую неправильную терминологию поиска, но мне кажется, что я использовал все возможные комбинации «R», «матрица», «изменение размера», «передискретизация» и т. д. и все еще новичок в языке кода R.

У меня есть матрица A с прикрепленными списками для «x» и «y», обозначающими положение широты/долготы центров каждого «пикселя» в матрице. Размер каждого пикселя примерно 4 на 7 километров. Значения в самой матрице являются значениями осадков.

Теперь у меня также есть другая матрица B с более мелкими квадратными пикселями (примерно 1 на 1 километр). Из этой матрицы у меня также есть координаты широты и долготы центра каждого пикселя.

Теперь я хочу изменить размер матрицы B, чтобы создать новую матрицу C, чтобы размер пикселей матрицы C совпадал с размером пикселей матрицы A (т.е. 4 на 7 километров), при этом среднее значение всех центров пиксели матрицы B, лежащие в пределах одного пикселя матрицы A, будут присвоены пикселям в новой матрице C.


person user2807278    schedule 23.09.2013    source источник
comment
См. ?resample в растровом пакете   -  person mdsumner    schedule 24.09.2013


Ответы (1)


Попробуйте функцию aggregate из пакета raster. Вот простой пример:

R> library(raster)
R> x <- matrix(1:81, 9, 9)
R> x
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
 [1,]    1   10   19   28   37   46   55   64   73
 [2,]    2   11   20   29   38   47   56   65   74
 [3,]    3   12   21   30   39   48   57   66   75
 [4,]    4   13   22   31   40   49   58   67   76
 [5,]    5   14   23   32   41   50   59   68   77
 [6,]    6   15   24   33   42   51   60   69   78
 [7,]    7   16   25   34   43   52   61   70   79
 [8,]    8   17   26   35   44   53   62   71   80
 [9,]    9   18   27   36   45   54   63   72   81
R> r <- raster(x)
R> r
class       : RasterLayer 
dimensions  : 9, 9, 81  (nrow, ncol, ncell)
resolution  : 0.1111, 0.1111  (x, y)
extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : 1, 81  (min, max)

R> res <- aggregate(r, fact=3, fun=mean)
R> res
class       : RasterLayer 
dimensions  : 3, 3, 9  (nrow, ncol, ncell)
resolution  : 0.3333, 0.3333  (x, y)
extent      : 0, 1, 0, 1  (xmin, xmax, ymin, ymax)
coord. ref. : NA 
data source : in memory
names       : layer 
values      : 11, 71  (min, max)

R> as.matrix(res)
     [,1] [,2] [,3]
[1,]   11   38   65
[2,]   14   41   68
[3,]   17   44   71

Различные горизонтальные и вертикальные коэффициенты агрегации могут быть указаны, если fact является вектором с двумя целочисленными значениями.

person rcs    schedule 23.09.2013
comment
Чтобы сохранить исходные координаты, указанные в OP, вы можете сделать r ‹- raster(list(x = x, y = y, z = A)) на первом шаге. - person mdsumner; 24.09.2013
comment
Спасибо за помощь, очень признателен. Теперь моя растеризованная матрица для агрегирования: › B ‹- растр (BASE, xmn=3,4542769865241, xmx=7,0503955930655, ymn=50,780349861793, ymx=53,603541813753, crs=+proj=longlat +datum) Который имеет размерность 2 из WGS84 на 329. (Как мне сделать, чтобы мой код отображался на этом стильном сером фоне?). Эта матрица должна быть изменена до размера 89 на 40, но когда я использую: › x_factor = 257/89 › y_factor = 329/40 ›ough_B ‹-aggregate(B, fact=x_factor, y_factor, fun=mean) Материал возвращается матрица 86 на 110. Вероятно, что-то делать с серединой ячеек и т.д. - person user2807278; 24.09.2013
comment
Ах. › грубый_B ‹- совокупный(B, факт=c(y_factor, x_factor), fun=mean) 86 на 42. Вероятно, остались проблемы с центром ячеек. - person user2807278; 24.09.2013
comment
Все еще не могу понять. Есть ли способ просто ввести количество ячеек в направлениях x и y, которые вы хотите создать с помощью агрегатной функции? - person user2807278; 24.09.2013