Любой эффективный способ объединить / объединить два разных многослойных растровых данных в один в R? - PullRequest
0 голосов
/ 03 июля 2018

Здесь у меня есть дневной минимум 16 лет и данные наблюдений за температурой в двух разных RasterBrick объектах. Я хочу объединить / объединить эти многослойные растры (суточный минимум и суточный максимум) в один, где можно легко манипулировать как суточной минимальной, так и суточной максимальной температурой в каждом растровом слое для дальнейшего использования. У меня нет четкой идеи, чтобы легко сделать эту агрегацию в R.

Вот как выглядит оригинальный многослойный растр:

> temp_1995_2010
class       : RasterStack 
dimensions  : 201, 464, 93264, 5844  (nrow, ncol, ncell, nlayers)
resolution  : 0.25, 0.25  (x, y)
extent      : -40.5, 75.5, 25.25, 75.5  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=longlat +datum=WGS84 
names       : X1995.01.01, X1995.01.02, X1995.01.03, X1995.01.04, X1995.01.05, X1995.01.06, X1995.01.07, X1995.01.08, X1995.01.09, X1995.01.10, X1995.01.11, X1995.01.12, X1995.01.13, X1995.01.14, X1995.01.15, ... 

Вот воспроизводимый пример наблюдения суточной минимальной и суточной максимальной температуры за 16 лет:

library(raster)
library(lubridate)
library(tidyverse)

Данные о максимальной дневной температуре за 16 лет:

T_max <- raster(xmn=5.75, xmx= 15, ymn = 47.25, ymx =55,res=c(0.25,0.25))
Deu_df_max <- do.call(stack,lapply(1:5844,function(i) setValues(T_max,round(runif(n = ncell(T_max),min = 2,max = 35)))))
names(Deu_df_max ) <- paste0('X',gsub('-','.',ymd('1980.01.01') + days(1:5844)))

Ежедневные данные о минимальной температуре за 16 лет:

T_min <- raster(xmn=5.75, xmx= 15, ymn = 47.25, ymx =55,res=c(0.25,0.25))
Deu_df_min <- do.call(stack,lapply(1:5844,function(i) setValues(T_min ,round(runif(n = ncell(T_min ),min = -5,max = 24)))))
names(Deu_df_min ) <- paste0('X',gsub('-','.',ymd('1980.01.01') + days(1:5844)))

желаемый вывод :

так что в моем желаемом выводе структура каждого растра позже будет такой (просто пример здесь):

date       year month day FID      county state  lat   long    tmax   tmin
1 1980-1-1 1980    1  1 6055 Napa County    CA 38.5 -122.5 12.5000 4.1100
2 1980-1-2 1980    1  2 6055 Napa County    CA 38.5 -122.5 12.5445 4.2894
3 1980-1-3 1980    1  3 6055 Napa County    CA 38.5 -122.5 12.5878 4.4574
4 1980-1-4 1980    1  4 6055 Napa County    CA 38.5 -122.5 12.6298 4.6144
5 1980-1-5 1980    1  5 6055 Napa County    CA 38.5 -122.5 12.6706 4.7604
6 1980-1-6 1980    1  6 6055 Napa County    CA 38.5 -122.5 12.7103 4.8959

обновление :

возможно, скелет моего желаемого выхода не верен, но дело в том, что я хочу, чтобы дневная минимальная и суточная максимальная температура были в одном распространенном многослойном растре. Это выполнимо?

Я хочу сохранить структуры исходного растра позже, но в дневной минимальный и максимальный значения температуры объединить один общий многослойный растр. Как я могу это сделать? Есть ли эффективный способ сделать это? Любая мгновенная помощь, чтобы объединить два многослойных растра в один? Есть идеи?

1 Ответ

0 голосов
/ 03 июля 2018

В большинстве случаев, вероятно, проще хранить отдельные объекты, но вы можете сделать

library(raster)
nd <- 5
r <- raster(xmn=1, xmx= 2, ymn = 1, ymx =2,res=c(0.5,0.5))
Tmax <- stack(lapply(1:nd, function(i) setValues(r, round(runif(ncell(r), min = 2,max = 35)))))
Tmin <- stack(lapply(1:5,function(i) setValues(r ,round(runif(ncell(r), min = -5,max = 24)))))
names(Tmax ) <- paste0('X', as.Date('1980-01-01') + 1:nd)
names(Tmin ) <- paste0('N', as.Date('1980-01-01') + 1:nd)

s <- stack(Tmin, Tmax)  

Если вы хотите составить таблицу со всеми значениями (вероятно, плохая идея), вы можете сделать

v <- rasterToPoints(s)
...