आर का उपयोग करके रेखापुंज का यादृच्छिक नमूना?


13

क्या रैस्टर को बेतरतीब ढंग से सैंपल करने का सीधा तरीका है ताकि प्रोसेस का आउटपुट रैस्टर हो?

मैं एक उदाहरण का उपयोग कर रहा हूं जो मुझे r-sig-geo सूची में मिला और मैंने पैकेज sampleRandomमें फ़ंक्शन की भी कोशिश की है 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)

जब मैं चलाता 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

ताकि एक रेखापुंज लिखने की कोशिश करने वाली निम्न पंक्ति संदेश उत्पन्न करती है:

# 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
यह उत्तर मुझे आर ...
सौल्टेन

2
यह बहुत स्पष्ट हो सकता है, लेकिन मुझे यह महसूस करने में कुछ समय लगा कि किसी भी सेल के मूल्य को संदर्भित किया जा सकता है r[r "condition"]। तो तुम रेखापुंज कि कर रहे हैं के सभी मूल्य सेट करना चाहते हैं 100होने के लिए 1आप लिख सकते हैं r[r == 100] <- 1। धन्यवाद @whuber - अत्यंत उपयोगी उदाहरण!
djq

@ किसी भी सुराग क्यों त्रुटि: hasValues ​​(x) TRUE पॉप अप नहीं है?
सीएसथ

2

आप sampleRandomफ़ंक्शन का उपयोग कर सकते हैं :

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

x <- sampleRandom(r, ncell(r)*.3, asRaster=TRUE)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.