R语言时空数据分析 您所在的位置:网站首页 r语言处理数据框 R语言时空数据分析

R语言时空数据分析

2023-03-24 12:21| 来源: 网络整理| 查看: 265

本章有两个主要目标。

读取、处理时空分析数据 简单的可视化时空数据的方法,(例如,空间分布图,时间序列图和 Hovmöller 图)。 1.数据整理

时空建模和预测通常涉及大量数据,这些数据以各种形式提供给用户,但通常以 CSV 文件或文本文件中的表格形式提供。通常会花费大量时间来加载数据并对其进行预处理,以便将它们转化为适合分析的形式。R 中有几个包可以帮助用户快速实现这些目标;在这里,我们专注于使用tidyverse工作流处理删失,它们包含特别适合所需数据操作技术的函数。我们首先加载所需的包,以及 STRbook(访问 https://spacetimewithr.org 获取有关如何安装 STRbook 的说明)

library(tidyverse) library(STRbook)

作为运行示例,我们将考虑 NOAA 数据集,该数据集以表格中的文本形式提供给我们,并随包 STRbook 提供。有六个数据表:

Stationinfo.dat。该表包含 328 行(每个站点一列)和三列(站点 ID、纬度坐标和经度坐标),包含站点位置信息。 Times_1990.dat。该表包含 1461 行(1990 年 1 月 1 日至 1993 年 12 月 30 日之间的每一天)和包含数据时间戳的四列(Julian公立日期、年、月、日)。 Tmax_1990.dat。该表包含 1461 行(每个时间点一行)和 328 列(每个站点位置一列),其中包含所有最高温度数据,缺失值编码为 -9999。 Tmin_1990.dat。与 Tmax_1990.dat 相同,但包含最低温度数据。 TDP_1990.dat。与 Tmax_1990.dat 相同,但包含温度露点数据,缺失值编码为 −999.90001。 Precip_1990.dat。与 Tmax_1990.dat 相同,但包含缺失值编码为 -99.989998 的降水数据。

第一项任务是将所有这些数据协调到一个对象中。在了解如何使用时空数据类来执行此操作之前,我们首先考虑将它们处理为长格式long format的标准 R 数据格式。

1.1处理长格式的时空数据

站点位置、时间和最高温度数据可以从 STRbook 加载到 R 中,如下所示。

locs % filter(!(z % mutate(proc = "Tmax") head(Tmax_long)

在这里插入图片描述

现在对其他变量重复相同的过程以获得数据帧 Tmin_long、TDP_long 和 Precip_long(记住缺失值的不同编码!)。为了节省时间,结果数据帧也可以直接从 STRbook 加载,如下所示。

data(Tmin_long, package = "STRbook") data(TDP_long, package = "STRbook") data(Precip_long, package = "STRbook")

我们现在可以通过使用函数 rbind 将所有这些(按行)简单地连接在一起,以长格式构建我们的最终数据帧。

NOAA_df_1990 % # 分组 summarise(mean_proc = mean(z)) # 求均值

或者,我们可能希望找出每年 6 月份每个站点没有下雨的天数。我们可以先过滤掉其他变量,然后使用summarise。

NOAA_precip = NOAA_df_1990 %>% filter(proc == "Precip" & month == 6) summ1 = NOAA_precip %>% group_by(year, id) %>% summarise(days_no_precip = sum(z == 0)) head(summ1)

在这里插入图片描述

没有记录降水的中位数天数是

median(summ1$days_no_precip) ## [1] 20

目前,我们的长数据框不包含附加的空间信息。但是,对于每个站 ID,我们在数据框 locs 中有一个关联的坐标。我们可以使用函数 left_join合并loc到 NOAA_df_1990;使用 left_join 我们需要提供要合并的列字段名称。在我们的例子中,两个数据集的共同字段是“id”。

NOAA_df_1990 = left_join(NOAA_df_1990, locs , by = "id")

最后,可能的情况是人们希望从长格式恢复到空间范围或时间范围的格式。这可以通过pviot_wider函数来实现,将值“加宽”到一个表中,而键则用于标记列。例如,下面的代码构建了一个空间范围的最高温度数据框,每行表示不同的日期,每列包含来自特定站 id 的数据 z。

Tmax_wide = Tmax_long %>% pivot_wider(names_from = id, values_from = z, values_fill = 0) dim(Tmax_wide) ## [1] 1461 142 1.2 创建时空数据对象

接下来,我们将数据转换为 STIDF 和 STFDF 类的对象;在这些类名中,“DF”是“数据框”的缩写,表示除了时空位置(只需要 STI 或 STF 对象),对象还包含数据。这些类在包 spacetime 中定义。由于有时我们使用空间对象构建时空对象,因此我们还需要加载包 sp。

library(sp) library(spacetime) (1)创建STIDF对象

不规则数据的时空对象 STIDF 可以使用两个函数构建:stConstruct 和 STIDF。让我们关注 Tmax_long 中的最高温度。在调用 stConstruct函数 之前,我们唯一需要做的就是从年、月、日字段中定义一个正式的时间戳。使用函数 paste 以年-月-日格式显示日期,该函数将字符串连接在一起。

NOAA_df_1990$date = with(NOAA_df_1990, paste(year, month, day, sep = "-")) head(NOAA_df_1990$date) ## [1] "1990-1-1" "1990-1-1" "1990-1-1" "1990-1-1" "1990-1-1" "1990-1-1"

字段日期是字符类型。现在可以使用 as.Date 将此字段转换为 Date 对象。

NOAA_df_1990$date = as.Date(NOAA_df_1990$date) class(NOAA_df_1990$date) ## [1] "Date"

现在我们已准备好构建最高温度的 STIDF 类的时空对象。最简单的方法是使用 stConstruct,其中我们以长格式提供数据框并指示哪些是空间和时间坐标。这是构建时空数据集所需的最低限度。

Tmax_long2 = NOAA_df_1990 %>% filter(proc == "Tmax") Tmax_long2 = as.data.frame(Tmax_long2) STObj = stConstruct(x = Tmax_long2, #数据集 space = c("lon", "lat"), #空间信息 time = "date") #时间信息 class(STObj) ## [1] "STIDF" ## attr(,"package") ## [1] "spacetime"

函数class可用于确认我们已成功生成类 STIDF 的对象。

函数 STIDF 与 stConstruct 略有不同,因为它也需要将空间部分指定为包 sp 中的类 Spatial 的对象。在我们的例子中,空间组件只是一个包含不规则间隔数据的对象,它在包 sp 中是一个 SpatialPoints 对象。可以使用函数 SpatialPoints 并通过提供坐标作为参数来构造 SpatialPoints 对象。

spat_part


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有