2

私は動物の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 年の最初の日に撮影されたもので、2 番目の画像が今年の 17 日に撮影されたものであることを示しています。

たとえば、テスト データの 7 番目の位置は、時間に応じて近くにあるため、2 番目のラスター ファイルから抽出されます。

全体として、87 個のラスター ファイルと 600 個の観測データがあります。これをプログラムする方法が本当にわかりません。substr()ラスター名から日付情報を取得するために使用できると思います。しかし、それ以外にも...このコンテキストで役立つ可能性のある関数についても、得ることができるすべてのヒントに感謝しています。

4

1 に答える 1

3

最後の行から開始

### 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
> 
于 2012-10-08T00:13:41.050 に答える