Muestreo aleatorio de ráster usando R

13

¿Existe una forma sencilla de muestrear aleatoriamente un ráster para que la salida del proceso sea un ráster? Estoy usando un ejemplo que encontré en el r-sig-geo list y también probé la función sampleRandom en el paquete raster . Ambos enfoques producen un resultado que no estoy seguro de cómo transformar en un ráster. No pude encontrar un enfoque después de buscar varias combinaciones de "SpatialPointsDataFrame raster".

library(raster)

# read in raster
rasterSource <- 'landsat.TIF'
r <- raster(rasterSource)

# convert to spatial points data frame
r.spgrd<-as(r,"SpatialPointsDataFrame") 

# elminate NA values
r.spgrd = r.spgrd[!is.na(r.spgrd[[1]]),] 

# sample points
selectedPoints = sample(1:length(r.spgrd[[1]]), 1000)
r.sampled = r.spgrd[selectedPoints,]

# try to make spgrd into a raster
r.test <- raster(r.sampled)

Cuando ejecuto r.test obtengo el resultado:

class       : RasterLayer 
dimensions  : 10, 10, 100  (nrow, ncol, ncell)
resolution  : 28617, 14766  (x, y)
extent      : 1838505, 2124675, 2328685, 2476345  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
values      : none

De modo que la siguiente línea que intenta escribir un ráster produce el mensaje:

# write out as ascii file
writeRaster(r.test, filename="test1.ASC", datatype="ascii", overwrite=TRUE)

Error: hasValues(x) is not TRUE

Mi objetivo principal es producir algún tipo de ráster después del proceso de muestreo. También estoy bien con solo cambiar los valores dentro de mi ráster (no estoy seguro de cómo hacerlo).

    
pregunta djq 25.11.2011 - 17:45

2 respuestas

19

Puedes adaptar ejemplos del paquete Raster vignette , 5.2. Aquí hay una forma:

r <- raster(ncol=30,nrow=20)
r[] <- 1:(30*20)              # Raster for testing
#plot(r)                      # (If you want to see it)
r[runif(30*20) >= 0.30] <- NA # Randomly *unselect* 70% of the data
plot(r)

    
respondido por el whuber 25.11.2011 - 18:33
0

Puedes usar la función sampleRandom :

library(raster)
r <- raster(ncol=30,nrow=20)
r[] <- 1:ncell(r)

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
    
respondido por el Robert Hijmans 23.11.2017 - 19:35

Lea otras preguntas en las etiquetas