Pengambilan sampel acak raster menggunakan R?

13

Apakah ada cara mudah untuk secara acak mengambil sampel raster sehingga output dari proses tersebut adalah raster?

Saya menggunakan contoh yang saya temukan di r-sig-geo daftar dan saya juga mencoba sampleRandomfungsi dalam rasterpaket. Kedua pendekatan ini menghasilkan output yang saya tidak yakin bagaimana mengubahnya menjadi raster. Saya tidak dapat menemukan pendekatan setelah mencari beberapa kombinasi "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)

Ketika saya menjalankan r.testsaya mendapatkan output:

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

Sehingga baris berikut yang mencoba menulis raster menghasilkan pesan:

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

Error: hasValues(x) is not TRUE

Tujuan utama saya adalah menghasilkan beberapa jenis raster setelah proses pengambilan sampel. Saya juga baik-baik saja dengan hanya mengubah nilai-nilai dalam raster saya (saya hanya tidak yakin bagaimana cara melakukannya).

djq
sumber

Jawaban:

21

Anda dapat mengadaptasi contoh dari sketsaRaster paket , bagian 5.2. Ini salah satu caranya:

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)

Pilihan raster

whuber
sumber
10
Jawaban ini membuat saya ingin belajar R ...
SaultDon
2
Ini mungkin sangat jelas, tetapi perlu beberapa waktu untuk menyadari bahwa nilai sel apa pun dapat dirujuk r[r "condition"]. Jadi, jika Anda ingin mengatur semua nilai raster yang 100akan 1Anda dapat menulis r[r == 100] <- 1. Terima kasih @whuber - contoh yang sangat berguna!
djq
@whuber Ada petunjuk mengapa Kesalahan: hasValues ​​(x) tidak BENAR muncul?
csheth
2

Anda dapat menggunakan sampleRandomfungsi ini:

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

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