r - 在 R 中将两个不同的多层栅格数据聚合/合并为一个的任何有效方法?
问题描述
在这里,我在两个不同的RasterBrick
对象上观察了 16 年的每日最低和温度数据。我想将这些多层栅格(每日最小值和每日最大值)聚合/合并为一个,其中可以在每个栅格层中轻松操纵每日最低和每日最高温度以供进一步使用。我没有一个可靠的想法来轻松地在 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
更新:
也许,我想要的输出的骨架不正确,但关键是我想要一个常见的多层栅格数据中的每日最低和每日最高温度。那可行吗?
我想稍后保留原始栅格的结构,但将每日最低和最高温度值放入一个常见的多层栅格中。我怎样才能做到这一点?有没有什么有效的方法来完成这项工作?将两个多层栅格合并为一个的任何即时帮助?任何想法?
解决方案
在大多数情况下,保留单独的对象可能更容易,但你可以这样做
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)
推荐阅读
- javascript - D3.js - 文本未显示在节点中
- python-2.7 - ImportError:没有名为 google.api_core 的模块
- php - 如何将数组中的值从控制器传递给查看
- regex - 重复 POSIX 量词在 Amazon Redshift 中不起作用
- xml - 如何使用 xsl 表达式在 ditamap 中获取 pubtitle
- javascript - IE 11 自动完成 - 不工作
- robotframework - Xpath 错误:无法对“文档”执行“评估”:
- mysql - 如何在一个 MysQl 查询中找到 MIN、MAX、FIRST、LAST?
- haskell - 为什么我的谓词被解释为布尔值?(哈斯克尔)
- python - 正则表达式选择所有数学运算符而不是连字符