Échantillonnage aléatoire de raster à l'aide de R?

13

Existe-t-il un moyen simple d'échantillonner au hasard un raster afin que la sortie du processus soit un raster?

J'utilise un exemple que j'ai trouvé sur la r-sig-geo liste et j'ai également essayé la sampleRandomfonction dans le rasterpackage. Ces deux approches produisent une sortie que je ne sais pas comment transformer en raster. Je n'ai pas pu trouver d'approche après avoir recherché plusieurs combinaisons de "raster SpatialPointsDataFrame".

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)

Quand je cours, r.testj'obtiens la sortie:

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

Pour que la ligne suivante qui essaie d'écrire un raster génère le message:

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

Error: hasValues(x) is not TRUE

Mon objectif principal est de produire un certain type de raster après le processus d'échantillonnage. Je suis également d'accord pour simplement changer les valeurs dans mon raster (je ne suis pas sûr de savoir comment faire).

djq
la source

Réponses:

21

Vous pouvez adapter des exemples de la vignette du Rasterpackage , section 5.2. Voici une façon:

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)

Sélection raster

whuber
la source
10
Cette réponse me donne envie d'apprendre R ...
SaultDon
2
Cela peut être extrêmement évident, mais il m'a fallu un certain temps pour réaliser que la valeur d'une cellule peut être référencée par r[r "condition"]. Donc, si vous souhaitez définir toutes les valeurs du raster qui doivent 100être, 1vous pouvez écrire r[r == 100] <- 1. Merci @whuber - exemple extrêmement utile!
djq
@whuber Tout indice pourquoi l'erreur: hasValues ​​(x) n'est pas VRAI apparu?
csheth
2

Vous pouvez utiliser la sampleRandomfonction:

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

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
Robert Hijmans
la source