2016-07-26 42 views
0

I eine Rasterdatei haben gridmap genannt, in UTM projiziert, der Klasse: SpatialGridDataFrame die wie folgt aussieht:Berechnung Mittelwerte pro Rasterzelle von Daten mit den zugehörigen Koordinaten

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 

Ich habe auch einen Datenrahmen, hat Koordinaten und Werte (V1), die diesen Koordinaten zugeordnet sind. Es kann mehrere Werte für bestimmte Koordinaten geben.

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

Was würde ich tun möchte, ist für jedes GRID-CELL in meinem Raster den Mittelwert von V1 nehmen, nicht für jedes einzelne in dem Datenrahmen koordinieren und einen Datenrahmen erstellen, die die Gitterzelle Wert hat , Rasterkoordinatenwert und Mittelwert V1. Ich kann herausfinden, wie die Orte auf die gridmap zu überlagern die Gitterzellen-IDs für jede Beobachtung mit diesem Code zu erhalten:

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 

Aber ich kann für jeden einzelnen den nächsten Schritt, der jeden Wert nicht herausfinden, Gitterzellen-ID und Erstellen eines neuen SpatialGridDataFrame, der alle gemittelten Gitterzellenwerte enthält, einschließlich der 0, wo ich keine Daten habe.

Antwort

1

Ich würde zuerst ein RasterLayer Objekt

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

machen, wie wir hier nicht Ihre Datei haben, ist ein Beispiel (Sie können auch r <- raster(gridmap) tun können).

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

Jetzt:

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