Zufällige Rasterabtastung mit R?

13

Gibt es eine einfache Möglichkeit, ein Raster nach dem Zufallsprinzip abzutasten, sodass die Ausgabe des Prozesses ein Raster ist?

Ich verwende ein Beispiel, das ich in der r-sig-geo Liste gefunden habe und ich habe auch die sampleRandomFunktion im rasterPaket ausprobiert . Beide Ansätze führen zu einer Ausgabe, bei der ich nicht sicher bin, wie sie in ein Raster umgewandelt werden soll. Nachdem ich nach mehreren Kombinationen von "SpatialPointsDataFrame-Raster" gesucht hatte, konnte ich keinen Ansatz finden.

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)

Wenn ich renne r.testbekomme ich die Ausgabe:

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

Damit die folgende Zeile, die versucht, ein Raster zu schreiben, die Nachricht erzeugt:

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

Error: hasValues(x) is not TRUE

Mein Hauptziel ist es, nach dem Sampling eine Art Raster zu erzeugen. Ich bin auch in Ordnung, wenn ich nur die Werte in meinem Raster ändere (ich bin mir einfach nicht sicher, wie ich das machen soll).

djq
quelle

Antworten:

21

Sie können Beispiele aus der Anpassung RasterPaket Vignette 5.2, Abschnitt. Hier ist eine Möglichkeit:

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)

Rasterauswahl

whuber
quelle
10
Diese Antwort bringt mich dazu, R zu lernen ...
SaultDon
2
Das mag sehr offensichtlich sein, aber es hat einige Zeit gedauert, bis mir klar wurde, dass der Wert einer Zelle von referenziert werden kann r[r "condition"]. Wenn Sie also den gesamten Wert des 100zu erstellenden Rasters festlegen möchten , können 1Sie schreiben r[r == 100] <- 1. Danke @whuber - extrem nützliches Beispiel!
Dienstag,
@whuber Irgendeine Ahnung, warum der Fehler: hasValues ​​(x) nicht WAHR ist?
Csheth
2

Sie können die sampleRandomFunktion verwenden:

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

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