Closed dominicroye closed 1 year ago
MODIFIED
Now I see the issue, would let you know when it is solved
It turns out that when unnesting these data we need to add the option keep_empty = TRUE
, otherwise rows that does not contain nested data (like the days 3 to 7 on temperature) are excluded on the unnested data frame. See an example on your reprex:
library(tidyverse)
urls <- jsonlite::fromJSON("https://github.com/rOpenSpain/climaemet/files/10331691/4000bb71.txt")
res <- jsonlite::flatten(urls, recursive = FALSE)
out <- unnest(res, col = prediccion.dia, keep_empty = TRUE) %>%
unnest(col = where(is.list), names_sep = "_", keep_empty = TRUE) %>%
unnest(col = where(is.list), names_sep = ".", keep_empty = TRUE)
final <- select(out, fecha, contains("temperatura")) %>%
distinct(.keep_all = TRUE) %>%
pivot_wider(names_from = temperatura_dato.hora, values_from = temperatura_dato.value,
names_prefix = "temperatura_hora")
final
#> # A tibble: 7 × 8
#> fecha temperat…¹ tempe…² tempe…³ tempe…⁴ tempe…⁵ tempe…⁶ tempe…⁷
#> <chr> <int> <int> <int> <int> <int> <int> <int>
#> 1 2023-01-02T00:00:00 19 8 8 18 14 12 NA
#> 2 2023-01-03T00:00:00 19 10 10 16 13 11 NA
#> 3 2023-01-04T00:00:00 18 8 NA NA NA NA NA
#> 4 2023-01-05T00:00:00 18 7 NA NA NA NA NA
#> 5 2023-01-06T00:00:00 18 6 NA NA NA NA NA
#> 6 2023-01-07T00:00:00 18 7 NA NA NA NA NA
#> 7 2023-01-08T00:00:00 19 10 NA NA NA NA NA
#> # … with abbreviated variable names ¹temperatura_maxima, ²temperatura_minima,
#> # ³temperatura_hora6, ⁴temperatura_hora12, ⁵temperatura_hora18,
#> # ⁶temperatura_hora24, ⁷temperatura_horaNA
Created on 2023-01-02 with reprex v2.0.2
Now after 26324f1843f78ef236e4505869aeb3bc88bdd3cc this is implemented on climaemet, althought at this stage the extracted data is still in "long" format instead on "wide" format. My understanding is that you had an additional proposal on this, right?
See how this is fixed
library(climaemet)
library(tidyverse)
pred <- aemet_forecast_daily("46250")
ext <- aemet_forecast_extract(pred, "temperatura")
glimpse(ext)
#> Rows: 13
#> Columns: 12
#> $ elaborado <dttm> 2023-01-02 17:43:48, 2023-01-02 17:43:48, 2023…
#> $ municipio <chr> "46250", "46250", "46250", "46250", "46250", "4…
#> $ nombre <chr> "València", "València", "València", "València",…
#> $ provincia <chr> "València/Valencia", "València/Valencia", "Valè…
#> $ id <chr> "-19286", "-19286", "-19286", "-19286", "-19286…
#> $ version <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
#> $ uvMax <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA
#> $ fecha <date> 2023-01-02, 2023-01-02, 2023-01-02, 2023-01-02,…
#> $ temperatura_maxima <int> 19, 19, 19, 19, 18, 18, 18, 18, 18, 18, 18, 18,…
#> $ temperatura_minima <int> 8, 8, 8, 8, 9, 9, 9, 9, 8, 7, 6, 7, 10
#> $ temperatura_dato_value <int> 8, 18, 14, 12, 10, 16, 13, 11, NA, NA, NA, NA,…
#> $ temperatura_dato_hora <int> 6, 12, 18, 24, 6, 12, 18, 24, NA, NA, NA, NA, NA
ext %>%
select(municipio, fecha, temperatura_minima, temperatura_maxima) %>%
distinct()
#> # A tibble: 7 × 4
#> municipio fecha temperatura_minima temperatura_maxima
#> <chr> <date> <int> <int>
#> 1 46250 2023-01-02 8 19
#> 2 46250 2023-01-03 9 18
#> 3 46250 2023-01-04 8 18
#> 4 46250 2023-01-05 7 18
#> 5 46250 2023-01-06 6 18
#> 6 46250 2023-01-07 7 18
#> 7 46250 2023-01-08 10 19
Created on 2023-01-02 with reprex v2.0.2
Hi @dominicroye
Please also note that I included an improvement on 33c2b16fba13817ed8911a8a3d1c69b1f0b6e102
Now the subscales are also formatted as hours with hms
class (see https://hms.tidyverse.org/). That means that e.g. daily data (and also hourly data) can be further manipulated on a more consistent way. Still the output is leveraging on the current unnesting method:
library(climaemet)
library(tidyverse)
pred <- aemet_forecast_daily("46250")
ext <- aemet_forecast_extract(pred, "temperatura")
ext %>%
select(municipio, contains("temperatura"))
#> # A tibble: 13 × 6
#> municipio temperatura_maxima temperatura_minima temperatura…¹ tempe…² tempe…³
#> <chr> <int> <int> <int> <int> <time>
#> 1 46250 17 8 8 6 06:00
#> 2 46250 17 8 16 12 12:00
#> 3 46250 17 8 13 18 18:00
#> 4 46250 17 8 9 24 23:59
#> 5 46250 17 6 7 6 06:00
#> 6 46250 17 6 16 12 12:00
#> 7 46250 17 6 12 18 18:00
#> 8 46250 17 6 8 24 23:59
#> 9 46250 16 6 NA NA NA
#> 10 46250 19 7 NA NA NA
#> 11 46250 20 13 NA NA NA
#> 12 46250 22 14 NA NA NA
#> 13 46250 24 12 NA NA NA
#> # … with abbreviated variable names ¹temperatura_dato_value,
#> # ²temperatura_dato_hora, ³temperatura_dato_hora_parsed
probprec <- aemet_forecast_extract(pred, "probPrecipitacion")
probprec %>%
select(municipio, contains("preci"))
#> # A tibble: 23 × 5
#> municipio probPrecipitacion_value probPrecipitacion_periodo probPr…¹ probPr…²
#> <chr> <int> <chr> <time> <time>
#> 1 46250 0 00-24 00:00 23:59:59
#> 2 46250 0 00-12 00:00 11:59:59
#> 3 46250 0 12-24 12:00 23:59:59
#> 4 46250 0 00-06 00:00 05:59:59
#> 5 46250 0 06-12 06:00 11:59:59
#> 6 46250 0 12-18 12:00 17:59:59
#> 7 46250 0 18-24 18:00 23:59:59
#> 8 46250 0 00-24 00:00 23:59:59
#> 9 46250 0 00-12 00:00 11:59:59
#> 10 46250 0 12-24 12:00 23:59:59
#> # … with 13 more rows, and abbreviated variable names
#> # ¹probPrecipitacion_periodo_inicio, ²probPrecipitacion_periodo_final
Created on 2023-01-04 with reprex v2.0.2
This, in conjunction with lubridate can be used to do things like this:
library(climaemet)
library(tidyverse)
# Hourly values
hourly <- aemet_forecast_hourly(c("15030", "28080"))
# Vars available
aemet_forecast_vars_available(hourly)
#> [1] "estadoCielo" "precipitacion" "probPrecipitacion"
#> [4] "probTormenta" "nieve" "probNieve"
#> [7] "temperatura" "sensTermica" "humedadRelativa"
#> [10] "vientoAndRachaMax"
# Get temperature
temp <- aemet_forecast_extract(hourly, "temperatura")
library(dplyr)
# Make hour - Need lubridate to adjust timezones
temp_end <- temp %>%
mutate(
forecast_time = lubridate::force_tz(
as.POSIXct(fecha) + temperatura_periodo_parsed,
tz = "Europe/Madrid"
)
)
# Add also sunset and sunrise
suns <- temp_end %>%
select(nombre, fecha, orto, ocaso) %>%
distinct_all() %>%
group_by(nombre) %>%
mutate(
ocaso_end = lubridate::force_tz(
as.POSIXct(fecha) + ocaso,
tz = "Europe/Madrid"
),
orto_end = lubridate::force_tz(
as.POSIXct(fecha) + orto,
tz = "Europe/Madrid"
),
orto_lead = lead(orto_end)
) %>%
drop_na()
# Plot
library(ggplot2)
ggplot(temp_end) +
geom_rect(data = suns, aes(
xmin = ocaso_end, xmax = orto_lead,
ymin = min(temp_end$temperatura_value),
ymax = max(temp_end$temperatura_value)
), alpha = .4) +
geom_line(aes(forecast_time, temperatura_value), color = "blue4") +
facet_wrap(~nombre, nrow = 2) +
scale_x_datetime(labels = scales::label_date_short()) +
scale_y_continuous(labels = scales::label_number(suffix = "º")) +
labs(
x = "", y = "",
title = "Forecast: Temperature",
subtitle = paste("Forecast produced on", format(temp_end$elaborado[1],
usetz = TRUE
))
)
Created on 2023-01-04 with reprex v2.0.2
Hi @dominicroye
On #30 I rename the function aemet_forecast_extract()
to aemet_forecast_tidy()
to make explicit that the function would create a "tidy" table. On the very same request I followed your suggestions, so now daily data is in "tidy wide" format (i.e. each municipality daily forecast present 7 rows, one per day).
There are other improvements (more consisten naming, etc.) that may break some code that you have already produced, but I tend to consider the new approach as the right one for this kind of data.
See in action with a full-fledged example:
library(climaemet)
library(tidyverse)
# Daily vars
daily <- aemet_forecast_daily(c("15030", "28080"))
# Print each var
dailyvars <- aemet_forecast_vars_available(daily)
for (i in dailyvars){
message("\nTesting daily var ", i, "----\n")
print(aemet_forecast_tidy(daily, i))
}
#>
#> Testing daily var probPrecipitacion----
#> # A tibble: 14 × 15
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 7 more variables: probPrecipitacion <int>,
#> # probPrecipitacion_00_12 <int>, probPrecipitacion_12_24 <int>,
#> # probPrecipitacion_00_06 <int>, probPrecipitacion_06_12 <int>,
#> # probPrecipitacion_12_18 <int>, probPrecipitacion_18_24 <int>, and
#> # abbreviated variable name ¹provincia
#>
#> Testing daily var cotaNieveProv----
#> # A tibble: 14 × 15
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 7 more variables: cotaNieveProv <dbl>, cotaNieveProv_00_12 <dbl>,
#> # cotaNieveProv_12_24 <dbl>, cotaNieveProv_00_06 <dbl>,
#> # cotaNieveProv_06_12 <dbl>, cotaNieveProv_12_18 <dbl>,
#> # cotaNieveProv_18_24 <dbl>, and abbreviated variable name ¹provincia
#>
#> Testing daily var estadoCielo----
#> # A tibble: 14 × 22
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 14 more variables: estadoCielo <chr>, estadoCielo_descripcion <chr>,
#> # estadoCielo_00_12 <chr>, estadoCielo_12_24 <chr>, estadoCielo_00_06 <chr>,
#> # estadoCielo_06_12 <chr>, estadoCielo_12_18 <chr>, estadoCielo_18_24 <chr>,
#> # estadoCielo_descripcion_00_12 <chr>, estadoCielo_descripcion_12_24 <chr>,
#> # estadoCielo_descripcion_00_06 <chr>, estadoCielo_descripcion_06_12 <chr>,
#> # estadoCielo_descripcion_12_18 <chr>, estadoCielo_descripcion_18_24 <chr>,
#> # and abbreviated variable name ¹provincia
#>
#> Testing daily var viento----
#> # A tibble: 14 × 22
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 14 more variables: viento_direccion <chr>, viento_velocidad <int>,
#> # viento_direccion_00_12 <chr>, viento_direccion_12_24 <chr>,
#> # viento_direccion_00_06 <chr>, viento_direccion_06_12 <chr>,
#> # viento_direccion_12_18 <chr>, viento_direccion_18_24 <chr>,
#> # viento_velocidad_00_12 <int>, viento_velocidad_12_24 <int>,
#> # viento_velocidad_00_06 <int>, viento_velocidad_06_12 <int>,
#> # viento_velocidad_12_18 <int>, viento_velocidad_18_24 <int>, and …
#>
#> Testing daily var rachaMax----
#> # A tibble: 14 × 15
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 7 more variables: rachaMax <dbl>, rachaMax_00_12 <dbl>,
#> # rachaMax_12_24 <dbl>, rachaMax_00_06 <dbl>, rachaMax_06_12 <dbl>,
#> # rachaMax_12_18 <dbl>, rachaMax_18_24 <dbl>, and abbreviated variable name
#> # ¹provincia
#>
#> Testing daily var temperatura----
#> # A tibble: 14 × 14
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 6 more variables: temperatura_maxima <int>, temperatura_minima <int>,
#> # temperatura_6 <int>, temperatura_12 <int>, temperatura_18 <int>,
#> # temperatura_24 <int>, and abbreviated variable name ¹provincia
#>
#> Testing daily var sensTermica----
#> # A tibble: 14 × 14
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 6 more variables: sensTermica_maxima <int>, sensTermica_minima <int>,
#> # sensTermica_6 <int>, sensTermica_12 <int>, sensTermica_18 <int>,
#> # sensTermica_24 <int>, and abbreviated variable name ¹provincia
#>
#> Testing daily var humedadRelativa----
#> # A tibble: 14 × 14
#> elaborado municipio nombre provi…¹ id version uvMax fecha
#> <dttm> <chr> <chr> <chr> <chr> <dbl> <int> <date>
#> 1 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-05
#> 2 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-06
#> 3 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-07
#> 4 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-08
#> 5 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 1 2023-01-09
#> 6 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-10
#> 7 2023-01-05 13:05:47 15030 Coruña,… A Coru… 15030 1 NA 2023-01-11
#> 8 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-05
#> 9 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-06
#> 10 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-07
#> 11 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-08
#> 12 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 1 2023-01-09
#> 13 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-10
#> 14 2023-01-05 13:05:59 28080 Majadah… Madrid 28080 1 NA 2023-01-11
#> # … with 6 more variables: humedadRelativa_maxima <int>,
#> # humedadRelativa_minima <int>, humedadRelativa_6 <int>,
#> # humedadRelativa_12 <int>, humedadRelativa_18 <int>,
#> # humedadRelativa_24 <int>, and abbreviated variable name ¹provincia
# Hourly
hourly <- aemet_forecast_hourly(c("15030", "28080"))
# Print each var
hourlyvars <- aemet_forecast_vars_available(hourly)
for (j in hourlyvars){
message("\nTesting hourly var ", j, "----\n")
print(aemet_forecast_tidy(hourly, j))
}
#>
#> Testing hourly var estadoCielo----
#> # A tibble: 96 × 12
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 86 more rows, 4 more variables: ocaso <time>, estadoCielo <chr>,
#> # hora <time>, estadoCielo_descripcion <chr>, and abbreviated variable name
#> # ¹provincia
#>
#> Testing hourly var precipitacion----
#> # A tibble: 96 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 86 more rows, 3 more variables: ocaso <time>, precipitacion <chr>,
#> # hora <time>, and abbreviated variable name ¹provincia
#>
#> Testing hourly var probPrecipitacion----
#> # A tibble: 16 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-07 09:05
#> 9 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 10 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 11 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 12 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 13 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 14 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 15 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 16 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-07 08:38
#> # … with 3 more variables: ocaso <time>, probPrecipitacion <dbl>, hora <time>,
#> # and abbreviated variable name ¹provincia
#>
#> Testing hourly var probTormenta----
#> # A tibble: 16 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-07 09:05
#> 9 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 10 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 11 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 12 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 13 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 14 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 15 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 16 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-07 08:38
#> # … with 3 more variables: ocaso <time>, probTormenta <dbl>, hora <time>, and
#> # abbreviated variable name ¹provincia
#>
#> Testing hourly var nieve----
#> # A tibble: 96 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 86 more rows, 3 more variables: ocaso <time>, nieve <dbl>,
#> # hora <time>, and abbreviated variable name ¹provincia
#>
#> Testing hourly var probNieve----
#> # A tibble: 16 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-06 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-07 09:05
#> 9 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 10 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 11 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-05 08:38
#> 12 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 13 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 14 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 15 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-06 08:38
#> 16 2023-01-05 13:04:20 28080 Majadah… Madrid 28080 1.0 2023-01-07 08:38
#> # … with 3 more variables: ocaso <time>, probNieve <dbl>, hora <time>, and
#> # abbreviated variable name ¹provincia
#>
#> Testing hourly var temperatura----
#> # A tibble: 94 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 84 more rows, 3 more variables: ocaso <time>, temperatura <dbl>,
#> # hora <time>, and abbreviated variable name ¹provincia
#>
#> Testing hourly var sensTermica----
#> # A tibble: 94 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 84 more rows, 3 more variables: ocaso <time>, sensTermica <dbl>,
#> # hora <time>, and abbreviated variable name ¹provincia
#>
#> Testing hourly var humedadRelativa----
#> # A tibble: 94 × 11
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 84 more rows, 3 more variables: ocaso <time>, humedadRelativa <dbl>,
#> # hora <time>, and abbreviated variable name ¹provincia
#>
#> Testing hourly var vientoAndRachaMax----
#> # A tibble: 94 × 13
#> elaborado municipio nombre provi…¹ id version fecha orto
#> <dttm> <chr> <chr> <chr> <chr> <chr> <date> <tim>
#> 1 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 2 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 3 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 4 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 5 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 6 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 7 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 8 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 9 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> 10 2023-01-05 13:04:08 15030 Coruña,… A Coru… 15030 1.0 2023-01-05 09:05
#> # … with 84 more rows, 5 more variables: ocaso <time>, hora <time>,
#> # vientoAndRachaMax <dbl>, vientoAndRachaMax_direccion <chr>,
#> # vientoAndRachaMax_velocidad <dbl>, and abbreviated variable name ¹provincia
Created on 2023-01-05 with reprex v2.0.2
I have a new proposal for unnesting the JSON. But there is still another issue. For instance, the forecast is always for 7 days, but in the way, you now apply unnest() lead to only two days. The thing is, you have, on a daily scale, a short-term forecast (3 days) with sub-daily temperatures and for the rest of days empty sub-daily data.
4000bb71.txt