0

在过去的二十年里,我一直在尝试使用 r 包rnoaa从离我的研究地点最近的气象站(基本上佛罗里达州的几乎每个州或国家公园)下载气候数据。

我没有找到任何对我有帮助或真正有意义的小插曲或教程,尤其是考虑到我正在使用的公园数量。我想知道这里是否有人有使用此软件包的经验,并且可以展示如何使用我列表中的几个公园进行此操作的示例?

我也有公园的经度和纬度:

df<-structure(list(ParkName = structure(c(2L, 6L, 4L, 7L, 5L, 6L, 
3L, 3L, 1L), .Label = c("Big Talbot Island State Park", "Fakahatchee Strand Preserve State Park", 
"Jonathan Dickinson State Park", "Key Largo Hammocks", "Myakka River State Park", 
"Paynes Prairie Preserve State Park", "Sebastian Inlet State Park"
), class = "factor"), ParkLatitude = c(26.02109, 29.57728, 25.25342, 
27.86018, 27.2263, 29.57728, 27.00857, 27.00857, 30.47957), ParkLongitude = c(-81.42208, 
-82.30675, -80.31574, -80.45221, -82.26661, -82.30675, -80.13897, 
-80.13897, -81.43955), Year = c(2004L, 2000L, 1996L, 1997L, 2008L, 
2002L, 2004L, 2002L, 1995L)), .Names = c("ParkName", "ParkLatitude", 
"ParkLongitude", "Year"), class = "data.frame", row.names = c(NA, 
-9L))

此示例数据的最终目标是获取数据中列出的年份中距离这些公园(或公园坐标)最近的气象站的年度温度、湿度和其他环境变量。我知道这些年份的数据可能会丢失,具体取决于气象站。

4

1 回答 1

1

这应该让你开始(使用df你的问题):

library(rnooa)

# load station data - takes some minutes

station_data <- ghcnd_stations()

# add id column for each location (necessary for next function)

df$id <- 1:nrow(df)

# retrieve all stations in radius (e.g. 20km) using lapply

stations <- lapply(1:nrow(df),
                   function(i) meteo_nearby_stations(df[i,],lat_colname = 'ParkLatitude',lon_colname = 'ParkLongitude',radius = 20,station_data = station_data)[[1]])

# pull data for nearest stations -  x$id[1] selects ID of closest station

stations_data <- lapply(stations,function(x)  meteo_pull_monitors(x$id[1]))

这将为您提供最近车站的所有变量。当然,您可以从所有可用变量中指定您需要的var变量。meteo_pull_monitors

您的下一步将是检查您想要的变量是否在您想要的时间范围内可用于这些站点。如果没有,您可以使用下一个最接近的。

例如

离您的第一个公园最近的车站只有降水量、最低和最高温度:

stations_data[[1]]

# # A tibble: 4,077 x 5
# id       date  prcp  tmax  tmin
# <chr>     <date> <dbl> <dbl> <dbl>
# 1 USW00092826 2007-02-01    NA    NA    NA
# 2 USW00092826 2007-02-02    NA    NA    NA
# 3 USW00092826 2007-02-03    NA    NA    NA
# 4 USW00092826 2007-02-04    NA    NA    NA
# 5 USW00092826 2007-02-05    NA    NA    NA
# 6 USW00092826 2007-02-06    NA    NA    NA
# 7 USW00092826 2007-02-07    NA    NA    NA
# 8 USW00092826 2007-02-08    NA    NA    NA
# 9 USW00092826 2007-02-09    NA    NA    NA
#10 USW00092826 2007-02-10    NA    NA    NA
# # ... with 4,067 more rows

您可以看到缺少需要处理的测量值。

于 2018-03-20T14:13:13.687 回答