สุ่มตัวอย่างแรสเตอร์โดยใช้ R?


13

มีวิธีที่ตรงไปตรงมาในการสุ่มตัวอย่างแรสเตอร์เพื่อให้ผลลัพธ์ของกระบวนการเป็นแรสเตอร์หรือไม่?

ฉันใช้ตัวอย่างที่ฉันพบในr-sig-geo รายการและฉันได้ลองใช้sampleRandomฟังก์ชันในrasterแพ็คเกจด้วย วิธีการทั้งสองนี้สร้างผลลัพธ์ที่ฉันไม่แน่ใจว่าจะเปลี่ยนเป็นแรสเตอร์ได้อย่างไร ฉันไม่สามารถค้นหาวิธีการหลังจากค้นหาชุดค่าผสมหลายชุดของ "SpatialPointsDataFrame raster"

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)

เมื่อฉันรันr.testฉันจะได้ผลลัพธ์:

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 สร้างข้อความ:

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

Error: hasValues(x) is not TRUE

วัตถุประสงค์หลักของฉันคือการผลิตแรสเตอร์บางประเภทหลังจากกระบวนการสุ่มตัวอย่าง ฉันยังสบายกับการเปลี่ยนค่าภายในแรสเตอร์ของฉัน (ฉันไม่แน่ใจว่าจะทำอย่างไร)

คำตอบ:


21

คุณสามารถปรับตัวอย่างจากRasterแพคเกจบทความส่วน 5.2 นี่คือวิธีหนึ่ง:

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)

การเลือกแรสเตอร์


10
คำตอบนี้ทำให้ผมอยากจะเรียนรู้ R ...
SaultDon

2
นี่อาจชัดเจนมาก แต่ใช้เวลาพอสมควรที่จะตระหนักว่าคุณค่าของเซลล์ใด ๆ สามารถอ้างอิงr[r "condition"]ได้ ดังนั้นหากคุณต้องการที่จะตั้งค่าทั้งหมดของแรสเตอร์ที่100จะเป็นคุณสามารถเขียน1 r[r == 100] <- 1ขอบคุณ @whuber - ตัวอย่างที่มีประโยชน์มาก!
djq

@whuber เบาะแสใด ๆ ที่ทำให้เกิดข้อผิดพลาด: hasValues ​​(x) ไม่ใช่ TRUE ที่โผล่ขึ้นมา?
csheth

2

คุณสามารถใช้sampleRandomฟังก์ชั่น:

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

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.