10.5 Exercícios

Pacotes necessários

pcks <- c("rio", "tidyverse", "lubridate")
easypackages::libraries(pcks)

Dados

arq_temp <- tempfile(fileext = ".RData")
download.file(
  "https://github.com/lhmet/adar-ufsm/blob/master/data/dados-lista-exerc4-cap9.RData?raw=true",
  destfile = arq_temp, 
  mode = "wb"
)
file.exists(arq_temp)

# nome dos dados carregados para os exercícios
print(load(arq_temp))
  1. Converta os dados de anomalias padronizadas do índice de oscilação sul armazenados no data frame soi (dado abaixo) para o formato "arrumado" e em ordem cronológica. Os nomes das variáveis na tabela de dados arrumado deve estar sempre em letras minúsculas (Converta se for necessário usando a função tolower(names(soi_arrumado))).
soi 

A estrutura esperada dos dados arrumados é mostrada abaixo:

Rows: 36
Columns: 3
$ year <int> 1951, 1951, 1951, 1951, 1951, 1951, 195...
$ mes  <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...
$ soi  <dbl> 1.5, 0.9, -0.1, -0.3, -0.7, 0.2, -1.0, ...
  1. Os dados de precipitação diária abaixo são uma pequena amostra dos dados usados na questão 4 da lista do Capítulo 8. Converta o tibble fornecido abaixo para o "formato arrumado". No data frame arrumado, transforme as datas obtidas (na classe de caractere) para classe date usando a função as.Date().
precd_ncdf

A estrutura esperada do tibble resultante é mostrada abaixo:

Rows: 40
Columns: 4
$ x    <dbl> -60.625, -60.375, -60.125, -60.625, -60...
$ y    <dbl> 5.125, 5.125, 5.125, 4.875, 4.875, 5.12...
$ date <date> 2010-01-01, 2010-01-01, 2010-01-01, 20...
$ prec <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000...
  1. Coloque os dados de poluição (tibble poluentes) no formato "arrumado".
poluentes

A estrutura esperada do tibble resultante é mostrada abaixo:

Rows: 3
Columns: 4
$ estacao <int> 1, 2, 4
$ no2     <chr> NA, NA, "1h"
$ ozone   <chr> "1h", "8h", NA
$ so2     <chr> "1h", NA, NA
  1. Coloque os dados meteorológicos diários da estação meteorológica de Santa Maria no formato arrumado. Deixe os dados ordenados cronologicamente.
dados_sm

A estrutura esperada do tibble resultante é mostrada abaixo:

Rows: 186
Columns: 6
$ id    <chr> "83936", "83936", "83936", "83936", "8...
$ month <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,...
$ year  <dbl> 2010, 2010, 2010, 2010, 2010, 2010, 20...
$ day   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,...
$ tmax  <dbl> 32.6, 33.4, 24.8, 29.4, 27.0, 24.4, 29...
$ tmin  <dbl> 17.9, 21.4, 21.6, 23.4, 23.2, 21.8, 18...

  1. Com os dados obtidos na questão 4:
  1. junte as colunas year, month e day em uma única coluna denominada date de forma que a classe dessa nova coluna seja date.

Estrutura de dados esperada:

Rows: 186
Columns: 4
$ id   <chr> "83936", "83936", "83936", "83936", "83...
$ date <date> 2010-01-01, 2010-01-02, 2010-01-03, 20...
$ tmax <dbl> 32.6, 33.4, 24.8, 29.4, 27.0, 24.4, 29....
$ tmin <dbl> 17.9, 21.4, 21.6, 23.4, 23.2, 21.8, 18....
  1. Filtre os dados obtidos em (a) de forma a descobrir as datas em que as observações de tmax ou tmin são faltantes. Mostre o tibble filtrado com as datas e explique o porquê de seus valores.

  1. A amostra de dados abaixo possui medidas a cada 6 horas de uma estação meteorológica de superfície. Reestruture os dados no formato "arrumado" e as informações de data e horário agregadas em uma única variável da classe POSIXct.
dados_zorra

A estrutura esperada do tibble resultante é mostrada abaixo:

Rows: 16
Columns: 3
$ date <dttm> 2010-01-01 00:00:00, 2010-01-01 06:00:...
$ tmax <dbl> 22.1, 21.0, 26.4, 27.0, 26.0, 25.0, 29....
$ tmin <dbl> 16.0, 13.5, 18.2, 24.1, 19.0, 13.7, 16....

  1. Faça uma junção da tabela de dados de informações das estações de poluição (etacoes, dada abaixo) com os períodos de duração de poluição crítica (poluentes). A tabela resultante deve conter somente estações que tenham coordenadas espaciais e medidas de poluentes válidas.
estacoes

Estrutura da tabela resultante:

Rows: 3
Columns: 5
$ id       <int> 1, 1, 2
$ lat      <dbl> 42.46757, 42.46757, 42.04915
$ lon      <dbl> -87.81005, -87.81005, -88.27303
$ poluente <chr> "ozone", "so2", "ozone"
$ duracao  <chr> "1h", "1h", "8h"

  1. Combine as 2 tabelas abaixo de forma que:
  1. a tabela resultante contenha todas as datas compreendidas pelas duas tabelas (e em ordem cronológica) e as observações de umidade do solo (theta) sejam preenchidas com NA.
# datas completas
datas_comp
# datas das observações de theta
datas_obs

Estrutura da tabela de dados resultante:

Rows: 8
Columns: 2
$ date  <date> 2018-07-13, 2018-07-14, 2018-07-15, 2...
$ theta <dbl> 0.3295812, 0.4123798, 0.3917322, NA, N...
  1. a tabela resultante contenha exatamente as datas da tabela data_comp (em ordem cronológica) e as observações de umidade do solo (theta) sejam preenchidas com NA.

Estrutura da tabela de dados resultante:

Rows: 7
Columns: 2
$ date  <date> 2018-07-14, 2018-07-15, 2018-07-16, 2...
$ theta <dbl> 0.4123798, 0.3917322, NA, NA, 0.326888...

Utilize os dados horários de estações meteorológicas automáticas (EMA) do RS (dados_rs_08_16) para solução das questões a seguir.

  1. Determinar a data inicial, final e o período de dados (em anos) de cada estação (identificada pela variável site).

Estrutura da tabela de dados resultante:

Rows: 42
Columns: 5
$ site        <chr> "A801", "A802", "A803", "A804", ...
$ periodo     <dbl> 8.5027322, 8.5027322, 8.5027322,...
$ inicio      <dttm> 2007-12-31 21:00:00, 2007-12-31...
$ fim         <dttm> 2016-12-31 20:00:00, 2016-12-31...
$ periodo_err <dbl> 9.0019393, 9.0019393, 9.0019393,...
  1. Determine a porcentagem de dados válidos (ou seja, não faltantes) de cada variável para cada EMA. Aproxime os valores para números inteiros.

Estrutura da tabela de dados resultante:

Rows: 42
Columns: 6
$ site <chr> "A801", "A802", "A803", "A804", "A805",...
$ tair <int> 99, 93, 96, 80, 93, 96, 97, 86, 97, 96,...
$ rh   <int> 99, 86, 96, 77, 93, 91, 97, 86, 95, 96,...
$ prec <int> 99, 93, 96, 80, 93, 96, 97, 87, 95, 96,...
$ rg   <int> 52, 49, 51, 44, 49, 50, 48, 46, 51, 51,...
$ ws   <int> 99, 93, 95, 80, 93, 96, 96, 87, 97, 97,...
  1. Adicione uma variável indicativa da porcentagem média de observações válidas de todas variáveis. Ordene esta tabela em ordem decrescente da disponibilidade média de observações.

Estrutura da tabela de dados resultante:

Rows: 42
Columns: 7
$ site     <chr> "A894", "A886", "A801", "A884", "A8...
$ tair     <int> 100, 99, 99, 99, 99, 100, 98, 98, 9...
$ rh       <int> 100, 99, 99, 99, 99, 94, 98, 98, 98...
$ prec     <int> 100, 99, 99, 99, 99, 100, 98, 98, 9...
$ rg       <int> 53, 55, 52, 52, 50, 53, 52, 51, 51,...
$ ws       <int> 99, 99, 99, 99, 99, 99, 98, 98, 98,...
$ disp_med <dbl> 90.4, 90.2, 89.6, 89.6, 89.2, 89.2,...
  1. Para a EMA de Santa Maria (ver info_emas_rs_08_16) obtenha o ciclo diurno médio da temperatura do ar e a porcentagem de dados válidos usados para compor a tair média de cada hora.

Dica: Para extrair as horas das datas use a função lubridate::hour(date).

Estrutura da tabela de dados resultante:

Rows: 24
Columns: 3
$ hour      <int> 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...
$ tair_med  <dbl> 17.26933, 16.87304, 16.52604, 16.2...
$ tair_disp <dbl> 96.68384, 96.55505, 96.42627, 96.2...
  1. Com os dados de temperatura do ar (tair) da EMA de Santa Maria selecione somente os dias observações válidas nas 24 horas. Obtenha a partir destes dados a frequência de ocorrência da temperatura mínima para cada horário do dia. Apresente a tabela de resultados em ordem decrescente da frequência de ocorrência.

Dica: para obter o dia a partir da data e hora (coluna date do tipo POSIXct) use lubridate::floor_date(date, unit = "day").

Estrutura da tabela de dados resultante:

Rows: 24
Columns: 2
$ h_tmin <int> 6, 7, 23, 5, 8, 4, 3, 2, 0, 1, 22, 21...
$ n      <int> 720, 561, 438, 311, 196, 190, 123, 90...