RNOAA R пакет доступа к данным

Я пытался использовать пакет 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))

Конечная цель данных этого примера - получить годовые температуры, влажность и другие переменные среды от метеостанций, ближайших к этим паркам (или координатам парков), за годы, указанные в данных. Я знаю, что в эти годы могут отсутствовать данные в зависимости от метеостанции.

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

И вы можете видеть, что отсутствуют измерения, с которыми вам нужно будет справиться.

Другие вопросы по тегам