循环浏览多个栅格Bricks以创建一个大的数据框架。

问题描述 投票:0回答:1

我有一个多频段 tif 图像的文件夹,我已经循环创建了多个不同变量的栅格砖,每个频段对应一个给定年份。我能够从栅格砖创建一个数据框架,但一次只能创建一个栅格。我怎样才能修改这个功能,使其在我的目录中循环浏览所有栅格砖,以输出一个包含x,y坐标、年份的数据帧,该数据帧对应于每个波段和每个变量。最终数据帧? 谢谢你

一次调用一个光栅的代码。

fs <- list.files(path=".../WinterTmin", pattern = "tif$", full.names = TRUE)

s <- brick(fs)
date <- seq(as.Date('2000-01-01'),as.Date('2017-01-01'), 'year')
s <- setZ(s, date)

rast <- rasterToPoints(s)


dd <- data.frame(Layer = names(s), dttm = as.Date(getZ(s)))

wtavg <- rast %>%
  as_data_frame() %>%
  rename(lon = x, lat = y) %>%
  gather(Layer, wintavg, -lon, -lat) %>%
  left_join(dd, by = "Layer") %>%
  dplyr::select(lon, lat, dttm, wintavg)
r loops dataframe time-series raster
1个回答
0
投票

请总是包括一个自成一体的可复制的例子。

library(raster)
f <- system.file("external/rlogo.grd", package="raster")
ff <- c(f, f, f)

你可以做一些类似这样的事情

x <- lapply(ff, function(i) {
         b <- brick(i)
         data.frame(rasterToPoints(b))
      })   

y <- do.call(cbind, x)
colnames(y) <- as.Date('2000-01-01') + 0:(ncol(y)-1)
y <- cbind(coordinates(brick(ff[1])), y)

y[1:2, 1:5]
#    x    y 2000-01-01 2000-01-02 2000-01-03
#1 0.5 76.5        0.5       76.5        255
#2 1.5 76.5        1.5       76.5        255
© www.soinside.com 2019 - 2024. All rights reserved.