Raster kullanarak R?


13

Sürecin çıktısı bir raster olacak şekilde bir rasterden rastgele örneklemenin kolay bir yolu var mı?

r-sig-geo Listede bulduğum bir örnek kullanıyorum ve ayrıca paketteki sampleRandomişlevi denedim raster. Her iki yaklaşım da bir raster haline nasıl dönüştürüleceğinden emin olmadığım bir çıktı üretir. "SpatialPointsDataFrame raster" çeşitli kombinasyonları aradıktan sonra bir yaklaşım bulamadı.

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)

Çalıştırdığımda r.testçıktıyı alıyorum:

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

Raster yazmaya çalışan aşağıdaki satırın mesajı oluşturması için:

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

Error: hasValues(x) is not TRUE

Temel amacım örnekleme sürecinden sonra bir çeşit tarama üretmek. Ayrıca rasterimdeki değerleri değiştirerek de iyiyim (bunu nasıl yapacağımdan emin değilim).

Yanıtlar:


21

Örnekleri Rasterpaket vinyetinden , bölüm 5.2'den uyarlayabilirsiniz . İşte bir yol:

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)

Raster seçimi


10
Bu cevap beni öğrenmek istiyor ...
SaultDon

2
Bu son derece açık olabilir, ancak herhangi bir hücrenin değerine referans verilebileceğini fark etmem biraz zaman aldı r[r "condition"]. Sen rasterinin tüm değerini ayarlamak istiyorsanız 100olmak 1yazabilirsiniz r[r == 100] <- 1. Teşekkürler @whuber - son derece yararlı bir örnek!
djq

@whuber Hata: hasValues ​​(x) 'un DOĞRU görünmediğine dair herhangi bir ipucu var mı?
csheth

2

sampleRandomİşlevi kullanabilirsiniz :

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

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.