R을 사용한 래스터의 무작위 샘플링?


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
이 대답은 ... 나를 R을 배우고 싶어한다
SaultDon

2
이것은 매우 분명 할 수 있지만 셀의 값을 참조 할 수 있다는 것을 깨닫는 데 시간이 걸렸습니다 r[r "condition"]. 당신이 래스터의 모든 값을 설정하려는 경우 그래서 1001당신이 쓸 수 있습니다 r[r == 100] <- 1. 감사합니다 @ whuber-매우 유용한 예!
djq

@ whuber 오류 : hasValues ​​(x)가 TRUE가 아닌 이유가 무엇입니까?
csheth 2016 년

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.