web-dev-qa-db-fra.com

Comment créer un raster à partir d'une trame de données dans r?

J'ai un cadre de données dans lequel les valeurs (l) sont spécifiées pour les coordonnées cartésiennes (x, y) comme dans l'exemple de travail minimal suivant.

set.seed(2013)
df <- data.frame( x = rep( 0:1, each=2 ),
                  y = rep( 0:1,  2),
                  l = rnorm( 4 ))

df
#   x y           l
# 1 0 0 -0.09202453
# 2 0 1  0.78901912
# 3 1 0 -0.66744232
# 4 1 1  1.36061149

Je veux créer un raster à l'aide du package raster, mais ma lecture de la documentation n'a pas révélé de méthode simple pour charger les données sous la forme que je les ai dans les cellules raster. J'ai trouvé quelques façons de le faire en utilisant des boucles, mais je soupçonne qu'il y a une approche beaucoup plus directe qui me manque.

21
Gregory

Voici une approche, via SpatialPixelsDataFrame

library(raster)
# create spatial points data frame
spg <- df
coordinates(spg) <- ~ x + y
# coerce to SpatialPixelsDataFrame
gridded(spg) <- TRUE
# coerce to raster
rasterDF <- raster(spg)
rasterDF
# class       : RasterLayer 
# dimensions  : 2, 2, 4  (nrow, ncol, ncell)
# resolution  : 1, 1  (x, y)
# extent      : -0.5, 1.5, -0.5, 1.5  (xmin, xmax, ymin, ymax)
# coord. ref. : NA 
# data source : in memory
# names       : l 
# values      : -0.6674423, 1.360611  (min, max)

help('raster') décrit un certain nombre de méthodes pour créer un raster à partir d'objets de différentes classes.

23
mnel

Une solution plus simple existe

 library(raster)
 dfr <- rasterFromXYZ(df)  #Convert first two columns as lon-lat and third as value                
 plot(dfr)
 dfr                  
 class       : RasterLayer 
 dimensions  : 2, 2, 4  (nrow, ncol, ncell)
 resolution  : 1, 1  (x, y)
 extent      : -0.5, 1.5, -0.5, 1.5  (xmin, xmax, ymin, ymax)
 coord. ref. : NA 
 data source : in memory
 names       : l 
 values      : -2.311813, 0.921186  (min, max)

Plot

De plus, vous pouvez spécifier la chaîne CRS. Une discussion détaillée est disponible ici.

42
Pankaj