Trích xuất trung bình của nhiều lớp raster bằng R?


8

Tôi không biết làm thế nào để đối phó với dữ liệu lớn mà tôi có từ radar.

Tôi đã có 144 hình ảnh .tif mỗi ngày và tôi cần trích xuất một giá trị trung bình hàng ngày, cho mỗi pixel và xuất nó trong một hình ảnh .tif.

Tôi nghĩ sẽ xếp tất cả 144 hình ảnh, nhưng tôi không biết cách tiếp tục và làm thế nào để xuất kết quả trong một hình ảnh.

Tôi đã bắt đầu điều này:

set("D:/R/Radar/Rasday1")
f <- list.files(getwd()) 
ras <- lapply(f,raster) 
STACK1 <- stack(ras)   ## with dimensions :1006, 804, 808824 (nrow, ncol, ncell)

Sau đó, tôi không biết liệu có ổn không khi tạo raster và làm một cái gì đó như:

r1<- raster(ncol=804, nrow=1006)
media<-mean(STACK1, r1)

Câu trả lời:


12

Sử dụng calc()để áp dụng các chức năng trên một đối tượng raster, chẳng hạn như Raster, RasterStackhoặc RasterBrick:

mean <- calc(STACK1, fun = mean)

Nếu bạn có giá trị na trong các ô, hãy thêm na.rm =T:

mean <- calc(STACK1, fun = mean, na.rm = T)

Ngoài ra, bạn cũng có thể sử dụng stackApply:

mean <- stackApply(STACK1, indices =  rep(1,nlayers(STACK1)), fun = "mean", na.rm = T)

Bạn có thể thực hiện việc này trong một vòng lặp để áp dụng chức năng này cho mỗi ngày trong thư mục radar của bạn:

library(raster)

dirs <- list.dirs("D:/R/Radar/", full.names = T, recursive = F)

means <- list()

for(i in 1:length(dirs)){
  setwd(dirs[i])
  f <- list.files(getwd()) 
  STACK1 <- stack(f)
  means[[i]] <- calc(STACK1, fun = mean, na.rm = T)
}

Để lưu dưới dạng .tiff, sử dụng writeRasterchức năng từ rastergói:

library(raster)

writeRaster(x = mean, filename = "mean.tif", driver = "GeoTiff")
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.