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))
- 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çãotolower(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, ...
- 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...
- 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
- 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...
- Com os dados obtidos na questão 4:
- junte as colunas
year
,month
eday
em uma única coluna denominadadate
de forma que a classe dessa nova coluna sejadate
.
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....
- Filtre os dados obtidos em (a) de forma a descobrir as datas em que as observações de
tmax
outmin
são faltantes. Mostre o tibble filtrado com as datas e explique o porquê de seus valores.
- 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....
- 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"
- Combine as 2 tabelas abaixo de forma que:
- 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 comNA
.
# 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...
- 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 comNA
.
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.
- 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,...
- 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,...
- 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,...
- 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 atair
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...
- 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 tipoPOSIXct
) uselubridate::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...