Lấy mẫu ngẫu nhiên của raster bằng R?


13

Có một cách đơn giản để lấy mẫu ngẫu nhiên một raster sao cho đầu ra của quá trình là một raster?

Tôi đang sử dụng một ví dụ mà tôi tìm thấy trong r-sig-geo danh sách và tôi cũng đã thử sampleRandomchức năng trong rastergói. Cả hai cách tiếp cận này đều tạo ra một đầu ra mà tôi không chắc chắn làm thế nào để chuyển đổi thành raster. Tôi đã không thể tìm thấy một cách tiếp cận sau khi tìm kiếm một số kết hợp "rat 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)

Khi tôi chạy, r.testtôi nhận được đầu ra:

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

Vì vậy, dòng sau đây cố gắng viết raster tạo ra thông báo:

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

Error: hasValues(x) is not TRUE

Mục tiêu chính của tôi là sản xuất một số loại raster sau quá trình lấy mẫu. Tôi cũng ổn khi chỉ thay đổi các giá trị trong raster của mình (Tôi chỉ không chắc chắn làm thế nào để làm điều đó).

Câu trả lời:


21

Bạn có thể điều chỉnh các ví dụ từ họa tiếtRaster gói , phần 5.2. Đây là một cách:

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)

Lựa chọn raster


10
Câu trả lời này khiến tôi muốn học R ...
SaultDon

2
Điều này có thể cực kỳ rõ ràng, nhưng tôi phải mất một thời gian để nhận ra rằng giá trị của bất kỳ ô nào cũng có thể được tham chiếu r[r "condition"]. Vì vậy, nếu bạn muốn đặt tất cả giá trị của raster sẽ 1001bạn có thể viết r[r == 100] <- 1. Cảm ơn @whuber - ví dụ cực kỳ hữu ích!
djq

@whuber Bất kỳ manh mối tại sao Lỗi: hasValues ​​(x) không xuất hiện TRUE?
csheth

2

Bạn có thể sử dụng sampleRandomchức năng:

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

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.