Вычисление средних значений для каждой ячейки сетки данных с соответствующими координатами

У меня есть растровый файл с именем gridmap, проецируемый в UTM, класса: SpatialGridDataFrame, который выглядит так:

Object of class SpatialGridDataFrame
Coordinates:
        min    max
[1,]  415.0  545.5
[2,] 6371.5 6493.0
Is projected: TRUE 
proj4string :
[+proj=utm +ellps=WGS84 +datum=WGS84 +zone=30 +units=km +towgs84=0,0,0]
Grid attributes:
  cellcentre.offset cellsize cells.dim
1            415.25      0.5       261
2           6371.75      0.5       243
Data attributes:
     values     
 Min.   :    1  
 1st Qu.:15856  
 Median :31712  
 Mean   :31712  
 3rd Qu.:47568  
 Max.   :63423  

У меня также есть фрейм данных, который имеет координаты и значения (V1), связанные с этими координатами. Для определенных координат может быть несколько значений.

DF <- data.frame(
    Lat = c(6384.705, 6384.701, 6384.698, 6384.698, 6384.691, 6384.687)
    Lon = c(439.7384, 439.7385, 439.7386, 439.7387, 439.7389, 439.7390)
    V1 = c(34, 0.006, 76, 34, 777, 0.0000348)
)

Что я хотел бы сделать, так это взять среднее значение V1 для каждой GRID-CELL в моем растре, а не для каждой дискретной координаты во фрейме данных, и создать фрейм данных, который имеет значение ячейки сетки, значение координаты растра и среднее значение V1. . Я могу понять, как наложить местоположения на gridmap, чтобы получить идентификаторы ячеек сетки для каждого наблюдения, используя этот код:

coords <- data.frame(cbind(DF$Lon, DF$Lat))   
coords <- SpatialPointsDataFrame(coords, data = data.frame(DF), proj4string = CRS(projUTM))
siteSpo <- over(x=coords, y=gridmap) 
DF$siteID <- siteSpo$values  

Но я не могу определить следующий шаг усреднения каждого значения для каждого отдельного идентификатора ячейки сетки и создания нового SpatialGridDataFrame, который имеет все средние значения ячеек сетки, включая 0, где у меня нет данных.


person Jojo    schedule 26.07.2016    source источник


Ответы (1)


Я бы сначала сделал RasterLayer объект

library(raster)
#r <- raster("gridmap file")

Поскольку у нас нет вашего файла, вот пример (вы также можете использовать r <- raster(gridmap)).

r <- raster(ncol=261, nrow=243, xmn=415, xmx=545.5, ymn=6371.5, ymx=6493.0)
values(r) <- 1:ncell(r)

Теперь:

df <- data.frame(
    y = c(6372, 6378, 6384, 6384, 6485, 6487),
    x = c(419, 429, 439, 439, 539, 500),
    V1 = c(34, 0.006, 76, 34, 777, 0.0000348)
)
df <- aggregate(df[, 'V1', drop=FALSE], df[,2:1], mean)
df$grid <- extract(r, df[,c('x', 'y')])

df
#    x    y       V1  grid
#1 419 6372 3.40e+01 63171
#2 429 6378 6.00e-03 60059
#3 439 6384 5.50e+01 56947
#4 539 6485 7.77e+02  4425
#5 500 6487 3.48e-05  3303
person Robert Hijmans    schedule 26.07.2016