R에서 해당 점 위치에 대한 픽셀 값을 추출합니다.
문제
나는 매일 여러 위치에 대한 동물 GPS 데이터를 가지고 있으며 동물의 위치가 기록되지 않은 경우 며칠 동안 정기적으로 간격을 둡니다.또한 16일 간격으로 위성 데이터가 있습니다.나는 지금하고 싶다 픽셀 값을 추출 에 해당하는 특정 지점 그리고 구체적인 시간.
이는 동물의 위치가 기록된 경우를 의미합니다.위성 이미지를 촬영하기 2일 전, 동물 위치가 기록되기 14일 전에 촬영한 이미지가 아닌 이 이미지(이후)의 픽셀 값을 추출하고 싶습니다.나는 항상 시간에 따라 더 가까이 있는 이미지에서 추출하고 싶다.
문제를 설명하는 몇 가지 테스트 데이터를 만들었습니다.
library(sp)
library(raster)
### Create test data
# create first raster
edc2012001_m <- raster(ncol=36, nrow=18)
edc2012001_m[] <- sample(1:ncell(edc2012001_m))
# create second raster
edc2012017_m <- raster(ncol=36, nrow=18)
edc2012017_m[] <- sample(1:ncell(edc2012017_m))
rasters<-stack(edc2012001_m,edc2012017_m)
# Create xy coordinates
time<-c("2012-01-01", "2012-01-01", "2012-01-01", "2012-01-02", "2012-01-02", "2012-01-02", "2012-01-12", "2012-01-12", "2012-01-13", "2012-01-13")
x <- rep(-50,10)
y <- sample(c(-80:80), 10)
data<-data.frame(x,y,time)
# Convert data to spatial points data frame
coordinates(data) <- c("x","y")
### Extract all data from raster stack
extract(rasters, data)
첫 번째 래스터 이름의 숫자 문자열은 해당 이미지가 2012년 첫 번째 날에 촬영되었음을 나타내고, 두 번째 이미지는 올해 17일에 촬영되었음을 나타냅니다.
예를 들어 테스트 데이터의 7번째 위치는 시간에 따라 더 가까워지므로 두 번째 래스터 파일에서 추출됩니다.
전체적으로 87개의 래스터 파일과 600개의 관찰 결과가 있습니다.나는 이것을 어떻게 프로그래밍하는지 잘 모르겠습니다.사용해도 될 것 같아요 substr()
래스터 이름에서 날짜 정보를 검색합니다.하지만 그 외에도...얻을 수 있는 모든 힌트와 이 맥락에서 도움이 될 수 있는 기능에 대해 감사드립니다.
해결책
마지막 줄부터 시작해서
### Extract all data from raster stack
ex <- extract(rasters, data)
# assuming you have these names or something similar
x <- c("edc2012001_m", "edc2012017_m")
year <- as.integer(substr(x, 4, 7))
# day of year
doy <- as.integer(substr(x, 8, 10))
date <- as.Date(doy, origin=paste(year-1, "-12-31", sep=''))
time <- as.Date(time)
# time difference
dif <- t(apply(matrix(as.integer(time)), 1, function(x) x-as.integer(date)))
# smallest time difference
i <- apply(abs(dif), 1, which.min)
# combine rows and columns to select values
v <- ex[cbind(1:nrow(ex),i)]
나는 얻다
> i
[1] 1 1 1 1 1 1 2 2 2 2
> v
[1] 582 578 303 201 201 200 461 329 445 211
>
제휴하지 않습니다 StackOverflow