Capítulo 2 Processamento de dados

Tabelas de dados como a apresentada no capítulo 1 são normalmente armazenadas em planilhas eletrônicas. Os formatos mais comuns para armazenamento são arquivos do tipo .xlsx, .csv, .txt e mais recentemente planilhas em nuvem (ex. google sheets). Os programas para visualização e destes tipos de arquivos são apropriados para inserção e armazenamendo de dados, mas apresentam limitações para o processamento, descrição e visualização.

Neste capítulo iremos utilizar a linguagem estatística R e o ambiente de trabalho RStudio para iniciar um projeto de análise de dados. Veremos como preparar um novo projeto na linguagem R, organizar as base de dados no diretório de trabalho, importá-las para o ambiente R e aplicar algumas ações comuns ao processamento de dados inicial. O objetivo é a base de dados original permaneça inalterada no diretório de trabalho e que todo o processamento seja feito em uma versão da base de dados que será importada para o ambiente R. Isto evita que sejam feitas alterações equivocadas diretamente na base de dados, resultando na perda da informação original.

Para mais detalhes sobre programação e processamento de dados no R veja: Introdução ao Ambiente R de Programação.

2.1 Criando o diretório de trabalho

Inicialmente, vamos criar um diretório de trabalho, um local em nosso computador onde iremos colocar todos os arquivos necessários ao projeto (ex. as tabelas de dados), bem como os arquivos gerados durante o projeto (planilhas, gráficos, figuras, slides, arquivos .pdf, etc.).

2.2 Iniciando o projeto Intro_estatistica

  • Na pasta Documentos crie um diretório denominado Intro_estatistica.

  • Após criar o diretório copie para dentro dele a base de dados Reservatorios_Parana_parcial.csv. A base está disponível no link do GitHub. Após entra no link, a janela de seu navegador irá mostrar um arquivo texto com os dados da planilha. Estes são os mesmo dados que apresentamod no capítulo 1.

  • Abra o R studio e em seguida crie um novo Script em: File --> New File --> RScript. Antes de qualquer ação, salve o novo arquivo como: aula_01.R. A partir de agora, todos os comandos desta aula deverão ser digitados dentro deste arquivo. Para rodar cada comando, pressione o botão Run no RStudio ou digite as teclas de atalho Ctrl + Enter. Não se esqueça de salvar o arquivo texto à medida que adiciona novos comandos.

  • Vamos dizer ao R onde procurar os arquivos relacionados a este projeto. Na primeira linha de seu arquivo novo digite o comando abaixo e depois pressione Run:

# Dewfinindo a localização do projeto em seu cmputador
setwd("C:/Users/f_cop/Documents/Intro_estatistica")

O caminho digitado acima é o caminho do meu diretório de trabalho. Você deve substituir pelo caminho do projeto em seu computador. Se você utiliza o Windows, note que o R utiliza a barra invertida (/) para separação dos pastas.


  • Para verificar se o comando foi bem sucedido, digite o seguinte comando no Console do RStudio:
getwd()
## [1] "C:/Users/f_cop/Documents/Intro_estatistica"

Como resultado, você deverá obter uma saída parecida com a apresentada acima, contendo o caminho do projeto em seu computador.

  • Finalmente, para verificar se o R está lendo corretamente os arquivos em seu diretório, digite o comando dir() no console do RStudio:
dir()
## [1] "Intro_estatistica.Rproj" 
##  [2] "Reservatorios_Parana_parcial.csv"

Se tudo estiver correto, o resultado deste comando deve listar os dois arquivos presentes em sua pasta de trabalho: Intro_estatistica.Rproj e Reservatorios_Parana_parcial.csv.

2.3 Instalação de pacotes

O R possui vários pacotes (ou bibliotecas) pré-instalados, porém é comum que tenhamos que utilizar alguns que não venham na instalação padrão. Neste projeto utilizaremos o pacote tidyverse. Para instalar o pacote, digite o seguinte comando no Console do RStudio:

install.packages("tidyverse")

Para mais detalhes sobre o pacote, acesse a apostila do R e veja o site oficial.

Um pacote necessita ser instalado somente uma vez em seu computador. Feito isto ele estará sempre disponível, bastando carregá-lo a cada vez que você abrir uma seção do R.

2.4 Carregando os pacotes

Antes de iniciar as análises, insira este comando em seu arquivo texto:

# Carrega pacotes
library(tidyverse)

Ao rodar este comando você habilita as funções do pacote para serem utilizados em sua seção do R. Sempre que você iniciar uma nova seção do R você deverá carregar os pacotes necessários com o comando library.

2.5 Importanto a base de dados

A base de dados está disponível em nosso diretório, porém ainda não a importamos para o ambiente R. Para isto, utilize o comando read_delim:

# Importa base de dados 
res = read_delim('Reservatorios_Parana_parcial.csv',
                  delim = ',',
                  locale = locale(decimal_mark = '.',
                                  encoding = 'latin1'))

O comando acima importa para o R os dados da tabela denominada Reservatorios_Parana_parcial.csv e cria um objeto denominado res contendo estas informações. A partir de agora, qualquer modificação que fizermos no objeto res, não irá alterar o arquivo .csv original.

Vamos entender alguns argumentos do comando read_delim:

  • delim = ',': utilizado para dizer ao R que cada coluna na base de dados está separada das demais por uma vírgula. Se no arquivo .csv as colunas estivessem seperadas por ponto-e-vígula, deveríamos escrever delim = ';'.

  • decimal_mark = '.': informa ao R que o símbolo ponto é utilizado como um separador decimal. Se no arquivo .csv os números decimais utilizassem a vírgula, o argumento deveria ser decimal_mark = ','.

  • encoding = 'latin1': indica a forma de codificação. A necessidade de seu uso depende do sistema operacional de seu computador. Outras formas de codificação além de são por exemplo UTF-8, ISO-8859-1. Geralmente, o argumento é necessário quando existem caracteres especiais na base de dados como acentos e cedilhas.

Podemos visualizar a base de dados digitando:

res
## # A tibble: 31 × 11
##    Reservatorio Bacia  Fechamento   Area Trofia    pH Condutividade Alcalinidade
##    <chr>        <chr>       <dbl>  <dbl> <chr>  <dbl>         <dbl>        <dbl>
##  1 Cavernoso    Iguacu       1965   2.9  Oligo…   7.4          33.1        140. 
##  2 Curucaca     Iguacu       1982   2    Oligo…   7            32.4        126. 
##  3 Foz do Areia Iguacu       1980 139    Oligo…   7.3          35.5         97  
##  4 Irai         Iguacu       2000  15    Eutró…   6.9          50.2          3.3
##  5 JMF          Iguacu       1970   0.45 Mesot…   7.3          40.2          3.7
##  6 Jordao       Iguacu       1996   3.4  Oligo…   7.1          23.7        153. 
##  7 Passauna     Iguacu       1978  14    Oligo…   8.8         126.         526  
##  8 Piraquara    Iguacu       1979   3.3  Oligo…   7.1          22.8         50.7
##  9 Salto Caxias Iguacu       1998 124    Oligo…   7.3          39.6        106  
## 10 Salto do Vau Iguacu       1959   2.9  Oligo…   6.5          23.2        279  
## # … with 21 more rows, and 3 more variables: P.total <dbl>, Riqueza <dbl>,
## #   CPUE <dbl>

Fazendo isso você verá somente parte da base de dados, a depender do tamanho de sua janela do RStudio. Caso queira ver a tabela completa digite:

View(res)

A base de dados é simplesmente uma tabela, em que cada linha trás uma observação e cada coluna uma variável. Vamos realizar algumas operações para entender como explorar as informações na tabela.

2.6 Verificando a base de dados

O comando abaixo informa alguns detalhes sobre cada coluna da tabela e dos tipos de dados:

glimpse(res)
## Rows: 31
## Columns: 11
## $ Reservatorio  <chr> "Cavernoso", "Curucaca", "Foz do Areia", "Irai", "JMF", …
## $ Bacia         <chr> "Iguacu", "Iguacu", "Iguacu", "Iguacu", "Iguacu", "Iguac…
## $ Fechamento    <dbl> 1965, 1982, 1980, 2000, 1970, 1996, 1978, 1979, 1998, 19…
## $ Area          <dbl> 2.90, 2.00, 139.00, 15.00, 0.45, 3.40, 14.00, 3.30, 124.…
## $ Trofia        <chr> "Oligotrófico", "Oligotrófico", "Oligotrófico", "Eutrófi…
## $ pH            <dbl> 7.4, 7.0, 7.3, 6.9, 7.3, 7.1, 8.8, 7.1, 7.3, 6.5, 8.6, 9…
## $ Condutividade <dbl> 33.1, 32.4, 35.5, 50.2, 40.2, 23.7, 125.6, 22.8, 39.6, 2…
## $ Alcalinidade  <dbl> 139.80, 125.70, 97.00, 3.30, 3.70, 152.70, 526.00, 50.67…
## $ P.total       <dbl> 7.8, 4.7, 14.3, 53.4, 41.2, 3.3, 15.2, 4.5, 12.1, 11.0, …
## $ Riqueza       <dbl> 18, 16, 19, 12, 18, 17, 11, 8, 21, 8, 24, 21, 22, 15, 10…
## $ CPUE          <dbl> 9.22, 28.73, 11.59, 30.76, 5.95, 7.75, 7.51, 4.01, 20.83…

Vemos dois tipos de dados: chr identificando que a coluna contém uma variável qualitativa e dbl, identificando que a coluna contém uma variável quantitativa.

2.7 Reorganizando a base de dados

A tabela contém uma coluna denominada Fechamento, que mostra o ano em que o reservatório foi formado. Vamos visualizar em ordem crescente do ano de formação, do mais antigo para o mais novo:

res %>% 
  arrange(Fechamento) %>% 
  View()

O reservatório mais antigo é de 1909 e o mais novo de 2000. Três reservatórios estão ao final da tabela pois para estes a variável Fechamento consta como faltante.

Ao rodar esta função não alteramos o objeto res, apenas o visualizamos em uma ordem diferente.

Digite o nome do objeto e verá que a ordem permanece inalterada.

res
## # A tibble: 31 × 11
##    Reservatorio Bacia  Fechamento   Area Trofia    pH Condutividade Alcalinidade
##    <chr>        <chr>       <dbl>  <dbl> <chr>  <dbl>         <dbl>        <dbl>
##  1 Cavernoso    Iguacu       1965   2.9  Oligo…   7.4          33.1        140. 
##  2 Curucaca     Iguacu       1982   2    Oligo…   7            32.4        126. 
##  3 Foz do Areia Iguacu       1980 139    Oligo…   7.3          35.5         97  
##  4 Irai         Iguacu       2000  15    Eutró…   6.9          50.2          3.3
##  5 JMF          Iguacu       1970   0.45 Mesot…   7.3          40.2          3.7
##  6 Jordao       Iguacu       1996   3.4  Oligo…   7.1          23.7        153. 
##  7 Passauna     Iguacu       1978  14    Oligo…   8.8         126.         526  
##  8 Piraquara    Iguacu       1979   3.3  Oligo…   7.1          22.8         50.7
##  9 Salto Caxias Iguacu       1998 124    Oligo…   7.3          39.6        106  
## 10 Salto do Vau Iguacu       1959   2.9  Oligo…   6.5          23.2        279  
## # … with 21 more rows, and 3 more variables: P.total <dbl>, Riqueza <dbl>,
## #   CPUE <dbl>

Se desejarmos visualizar a tabela em ordem decresente, basta fazermos:

res %>% 
  arrange(desc(Fechamento)) %>% 
  View()

Se utilizarmos as função arrange() com uma variável nominal, a tabela será organizada em ordem alfabética para esta variável.

res %>% 
  arrange(Bacia) %>% 
  View()

2.8 Selecionando colunas da tabela

É interessante, sobretudo para grandes bases de dados, se pudermos selecionar sub-grupos de colunas, excluindo outras que não nos interessam. Podemos fazer isto facilmente utilizando a função select().

Por exemplo, para selecionar somente as colunas Reservatório, Area e Riqueza:

res_new = res %>% 
  select(Reservatorio, Area, Riqueza)

rew_new
Reservatorio Area Riqueza
Cavernoso 2.90 18
Curucaca 2.00 16
Foz do Areia 139.00 19
Irai 15.00 12
JMF 0.45 18
Jordao 3.40 17
Passauna 14.00 11
Piraquara 3.30 8
Salto Caxias 124.00 21
Salto do Vau 2.90 8
Salto Osorio 51.00 24
Salto Santiago 208.00 21
Segredo 82.50 22
Mourao 11.30 15
Patos 1.30 10
Guaricana 7.00 12
Parigot Souza 12.00 12
Salto do Meio 0.10 11
Vossoroca 5.10 14
Canoas I 30.85 35
Canoas II 22.50 40
Capivara 419.30 34
Chavantes 400.00 23
Rosana 220.00 30
Salto Grande 12.00 24
Taquarucu 80.10 33
Melissa 0.10 12
Santa Maria 0.07 7
Alagados 7.20 7
Apucaraninha NA 10
Harmonia NA 7

O que fizemos aqui foi cirar um novo objeto (res_new), contendo somente as colunas selecionadas.

Se quisermos selecionar todas as variáveis exceto Reservatório fazemos:

rew_new = res %>% 
  select(-Reservatorio)

rew_new
Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE
Iguacu 1965 2.90 Oligotrófico 7.4 33.1 139.80 7.8 18 9.22
Iguacu 1982 2.00 Oligotrófico 7.0 32.4 125.70 4.7 16 28.73
Iguacu 1980 139.00 Oligotrófico 7.3 35.5 97.00 14.3 19 11.59
Iguacu 2000 15.00 Eutrófico 6.9 50.2 3.30 53.4 12 30.76
Iguacu 1970 0.45 Mesotrófico 7.3 40.2 3.70 41.2 18 5.95
Iguacu 1996 3.40 Oligotrófico 7.1 23.7 152.70 3.3 17 7.75
Iguacu 1978 14.00 Oligotrófico 8.8 125.6 526.00 15.2 11 7.51
Iguacu 1979 3.30 Oligotrófico 7.1 22.8 50.67 4.5 8 4.01
Iguacu 1998 124.00 Oligotrófico 7.3 39.6 106.00 12.1 21 20.83
Iguacu 1959 2.90 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43
Iguacu 1975 51.00 Oligotrófico 8.6 38.9 233.30 3.4 24 12.55
Iguacu 1979 208.00 Oligotrófico 9.2 39.5 117.60 13.1 21 11.73
Iguacu 1992 82.50 Oligotrófico 7.0 34.5 165.20 6.4 22 13.72
Ivai 1964 11.30 Oligotrófico 8.1 23.3 56.55 7.1 15 16.50
Ivai NA 1.30 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71
Litoranea 1957 7.00 Oligotrófico 7.4 27.9 83.72 12.4 12 7.95
Litoranea 1970 12.00 Oligotrófico 7.7 63.6 259.20 16.9 12 13.12
Litoranea NA 0.10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10
Litoranea 1949 5.10 Mesotrófico 7.3 39.8 156.00 21.9 14 11.74
Paranapanema 1999 30.85 Oligotrófico 7.4 63.3 234.90 9.9 35 17.95
Paranapanema 1992 22.50 Oligotrófico 7.8 61.2 NA 9.0 40 13.86
Paranapanema 1975 419.30 Oligotrófico 7.5 58.6 196.00 5.5 34 13.04
Paranapanema 1970 400.00 Oligotrófico 7.6 57.8 211.80 7.8 23 7.35
Paranapanema 1986 220.00 NA 7.7 58.2 202.40 NA 30 20.92
Paranapanema 1958 12.00 Oligotrófico 7.1 62.3 230.10 10.3 24 13.67
Paranapanema 1989 80.10 Oligotrófico 7.9 57.0 191.80 4.5 33 21.82
Piriqui 1962 0.10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29
Piriqui NA 0.07 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40
Tibagi 1909 7.20 Oligotrófico 7.6 41.7 172.20 19.9 7 5.60
Tibagi 1958 NA NA NA NA NA NA 10 2.05
Tibagi NA NA Oligotrófico 8.3 31.0 113.30 8.6 7 24.88

Podemos fazer também uma seleção que vá desde uma coluna inicial até uma coluna final. Podemos selecionar, por exemplo, todas as colunas desde pH até P.total. Para isto fazemos:

res_new = res %>% 
  select(pH:P.total)

res_new
pH Condutividade Alcalinidade P.total
7.4 33.1 139.80 7.8
7.0 32.4 125.70 4.7
7.3 35.5 97.00 14.3
6.9 50.2 3.30 53.4
7.3 40.2 3.70 41.2
7.1 23.7 152.70 3.3
8.8 125.6 526.00 15.2
7.1 22.8 50.67 4.5
7.3 39.6 106.00 12.1
6.5 23.2 279.00 11.0
8.6 38.9 233.30 3.4
9.2 39.5 117.60 13.1
7.0 34.5 165.20 6.4
8.1 23.3 56.55 7.1
6.9 46.0 180.10 39.2
7.4 27.9 83.72 12.4
7.7 63.6 259.20 16.9
6.9 37.4 147.10 17.1
7.3 39.8 156.00 21.9
7.4 63.3 234.90 9.9
7.8 61.2 NA 9.0
7.5 58.6 196.00 5.5
7.6 57.8 211.80 7.8
7.7 58.2 202.40 NA
7.1 62.3 230.10 10.3
7.9 57.0 191.80 4.5
6.8 34.0 68.37 66.9
6.8 41.7 480.10 14.9
7.6 41.7 172.20 19.9
NA NA NA NA
8.3 31.0 113.30 8.6

Podemos ainda selecionar todas as variáveis categóricas:

rew_new = res %>% 
  select_if(is.character)

rew_new
Reservatorio Bacia Trofia
Cavernoso Iguacu Oligotrófico
Curucaca Iguacu Oligotrófico
Foz do Areia Iguacu Oligotrófico
Irai Iguacu Eutrófico
JMF Iguacu Mesotrófico
Jordao Iguacu Oligotrófico
Passauna Iguacu Oligotrófico
Piraquara Iguacu Oligotrófico
Salto Caxias Iguacu Oligotrófico
Salto do Vau Iguacu Oligotrófico
Salto Osorio Iguacu Oligotrófico
Salto Santiago Iguacu Oligotrófico
Segredo Iguacu Oligotrófico
Mourao Ivai Oligotrófico
Patos Ivai Mesotrófico
Guaricana Litoranea Oligotrófico
Parigot Souza Litoranea Oligotrófico
Salto do Meio Litoranea Oligotrófico
Vossoroca Litoranea Mesotrófico
Canoas I Paranapanema Oligotrófico
Canoas II Paranapanema Oligotrófico
Capivara Paranapanema Oligotrófico
Chavantes Paranapanema Oligotrófico
Rosana Paranapanema NA
Salto Grande Paranapanema Oligotrófico
Taquarucu Paranapanema Oligotrófico
Melissa Piriqui Eutrófico
Santa Maria Piriqui Oligotrófico
Alagados Tibagi Oligotrófico
Apucaraninha Tibagi NA
Harmonia Tibagi Oligotrófico

Ou todas as variáveis numéricas:

rew_new = res %>% 
  select_if(is.numeric)

rew_new
Fechamento Area pH Condutividade Alcalinidade P.total Riqueza CPUE
1965 2.90 7.4 33.1 139.80 7.8 18 9.22
1982 2.00 7.0 32.4 125.70 4.7 16 28.73
1980 139.00 7.3 35.5 97.00 14.3 19 11.59
2000 15.00 6.9 50.2 3.30 53.4 12 30.76
1970 0.45 7.3 40.2 3.70 41.2 18 5.95
1996 3.40 7.1 23.7 152.70 3.3 17 7.75
1978 14.00 8.8 125.6 526.00 15.2 11 7.51
1979 3.30 7.1 22.8 50.67 4.5 8 4.01
1998 124.00 7.3 39.6 106.00 12.1 21 20.83
1959 2.90 6.5 23.2 279.00 11.0 8 2.43
1975 51.00 8.6 38.9 233.30 3.4 24 12.55
1979 208.00 9.2 39.5 117.60 13.1 21 11.73
1992 82.50 7.0 34.5 165.20 6.4 22 13.72
1964 11.30 8.1 23.3 56.55 7.1 15 16.50
NA 1.30 6.9 46.0 180.10 39.2 10 4.71
1957 7.00 7.4 27.9 83.72 12.4 12 7.95
1970 12.00 7.7 63.6 259.20 16.9 12 13.12
NA 0.10 6.9 37.4 147.10 17.1 11 16.10
1949 5.10 7.3 39.8 156.00 21.9 14 11.74
1999 30.85 7.4 63.3 234.90 9.9 35 17.95
1992 22.50 7.8 61.2 NA 9.0 40 13.86
1975 419.30 7.5 58.6 196.00 5.5 34 13.04
1970 400.00 7.6 57.8 211.80 7.8 23 7.35
1986 220.00 7.7 58.2 202.40 NA 30 20.92
1958 12.00 7.1 62.3 230.10 10.3 24 13.67
1989 80.10 7.9 57.0 191.80 4.5 33 21.82
1962 0.10 6.8 34.0 68.37 66.9 12 6.29
NA 0.07 6.8 41.7 480.10 14.9 7 9.40
1909 7.20 7.6 41.7 172.20 19.9 7 5.60
1958 NA NA NA NA NA 10 2.05
NA NA 8.3 31.0 113.30 8.6 7 24.88

Finalmente, podemos alterar a ordem das colunas:

nova_ordem = c('Fechamento', 'Area', 'Bacia', 'Reservatorio', 'CPUE', 'Riqueza',
               'Trofia', 'Condutividade', 'pH', 'P.total', 'Alcalinidade')
res_new = res %>% 
  select(nova_ordem)

res_new
Fechamento Area Bacia Reservatorio CPUE Riqueza Trofia Condutividade pH P.total Alcalinidade
1965 2.90 Iguacu Cavernoso 9.22 18 Oligotrófico 33.1 7.4 7.8 139.80
1982 2.00 Iguacu Curucaca 28.73 16 Oligotrófico 32.4 7.0 4.7 125.70
1980 139.00 Iguacu Foz do Areia 11.59 19 Oligotrófico 35.5 7.3 14.3 97.00
2000 15.00 Iguacu Irai 30.76 12 Eutrófico 50.2 6.9 53.4 3.30
1970 0.45 Iguacu JMF 5.95 18 Mesotrófico 40.2 7.3 41.2 3.70
1996 3.40 Iguacu Jordao 7.75 17 Oligotrófico 23.7 7.1 3.3 152.70
1978 14.00 Iguacu Passauna 7.51 11 Oligotrófico 125.6 8.8 15.2 526.00
1979 3.30 Iguacu Piraquara 4.01 8 Oligotrófico 22.8 7.1 4.5 50.67
1998 124.00 Iguacu Salto Caxias 20.83 21 Oligotrófico 39.6 7.3 12.1 106.00
1959 2.90 Iguacu Salto do Vau 2.43 8 Oligotrófico 23.2 6.5 11.0 279.00
1975 51.00 Iguacu Salto Osorio 12.55 24 Oligotrófico 38.9 8.6 3.4 233.30
1979 208.00 Iguacu Salto Santiago 11.73 21 Oligotrófico 39.5 9.2 13.1 117.60
1992 82.50 Iguacu Segredo 13.72 22 Oligotrófico 34.5 7.0 6.4 165.20
1964 11.30 Ivai Mourao 16.50 15 Oligotrófico 23.3 8.1 7.1 56.55
NA 1.30 Ivai Patos 4.71 10 Mesotrófico 46.0 6.9 39.2 180.10
1957 7.00 Litoranea Guaricana 7.95 12 Oligotrófico 27.9 7.4 12.4 83.72
1970 12.00 Litoranea Parigot Souza 13.12 12 Oligotrófico 63.6 7.7 16.9 259.20
NA 0.10 Litoranea Salto do Meio 16.10 11 Oligotrófico 37.4 6.9 17.1 147.10
1949 5.10 Litoranea Vossoroca 11.74 14 Mesotrófico 39.8 7.3 21.9 156.00
1999 30.85 Paranapanema Canoas I 17.95 35 Oligotrófico 63.3 7.4 9.9 234.90
1992 22.50 Paranapanema Canoas II 13.86 40 Oligotrófico 61.2 7.8 9.0 NA
1975 419.30 Paranapanema Capivara 13.04 34 Oligotrófico 58.6 7.5 5.5 196.00
1970 400.00 Paranapanema Chavantes 7.35 23 Oligotrófico 57.8 7.6 7.8 211.80
1986 220.00 Paranapanema Rosana 20.92 30 NA 58.2 7.7 NA 202.40
1958 12.00 Paranapanema Salto Grande 13.67 24 Oligotrófico 62.3 7.1 10.3 230.10
1989 80.10 Paranapanema Taquarucu 21.82 33 Oligotrófico 57.0 7.9 4.5 191.80
1962 0.10 Piriqui Melissa 6.29 12 Eutrófico 34.0 6.8 66.9 68.37
NA 0.07 Piriqui Santa Maria 9.40 7 Oligotrófico 41.7 6.8 14.9 480.10
1909 7.20 Tibagi Alagados 5.60 7 Oligotrófico 41.7 7.6 19.9 172.20
1958 NA Tibagi Apucaraninha 2.05 10 NA NA NA NA NA
NA NA Tibagi Harmonia 24.88 7 Oligotrófico 31.0 8.3 8.6 113.30

2.9 Filtrando linhas da tabela

Podemos fazer algo similar com as linhas utilizando a função filter().

Se quisermos selecionar somente os reservatórios da bacia do rio Paranapanema podemos fazer:

res_paranapanema = res %>% 
  filter(Bacia == 'Paranapanema')

res_paranapanema
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE
Canoas I Paranapanema 1999 30.85 Oligotrófico 7.4 63.3 234.9 9.9 35 17.95
Canoas II Paranapanema 1992 22.50 Oligotrófico 7.8 61.2 NA 9.0 40 13.86
Capivara Paranapanema 1975 419.30 Oligotrófico 7.5 58.6 196.0 5.5 34 13.04
Chavantes Paranapanema 1970 400.00 Oligotrófico 7.6 57.8 211.8 7.8 23 7.35
Rosana Paranapanema 1986 220.00 NA 7.7 58.2 202.4 NA 30 20.92
Salto Grande Paranapanema 1958 12.00 Oligotrófico 7.1 62.3 230.1 10.3 24 13.67
Taquarucu Paranapanema 1989 80.10 Oligotrófico 7.9 57.0 191.8 4.5 33 21.82

Ou todos os reservatório exceto os da bacia do rio Paranapanema.

res_outros = res %>% 
  filter(Bacia != 'Paranapanema')

res_outros
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE
Cavernoso Iguacu 1965 2.90 Oligotrófico 7.4 33.1 139.80 7.8 18 9.22
Curucaca Iguacu 1982 2.00 Oligotrófico 7.0 32.4 125.70 4.7 16 28.73
Foz do Areia Iguacu 1980 139.00 Oligotrófico 7.3 35.5 97.00 14.3 19 11.59
Irai Iguacu 2000 15.00 Eutrófico 6.9 50.2 3.30 53.4 12 30.76
JMF Iguacu 1970 0.45 Mesotrófico 7.3 40.2 3.70 41.2 18 5.95
Jordao Iguacu 1996 3.40 Oligotrófico 7.1 23.7 152.70 3.3 17 7.75
Passauna Iguacu 1978 14.00 Oligotrófico 8.8 125.6 526.00 15.2 11 7.51
Piraquara Iguacu 1979 3.30 Oligotrófico 7.1 22.8 50.67 4.5 8 4.01
Salto Caxias Iguacu 1998 124.00 Oligotrófico 7.3 39.6 106.00 12.1 21 20.83
Salto do Vau Iguacu 1959 2.90 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43
Salto Osorio Iguacu 1975 51.00 Oligotrófico 8.6 38.9 233.30 3.4 24 12.55
Salto Santiago Iguacu 1979 208.00 Oligotrófico 9.2 39.5 117.60 13.1 21 11.73
Segredo Iguacu 1992 82.50 Oligotrófico 7.0 34.5 165.20 6.4 22 13.72
Mourao Ivai 1964 11.30 Oligotrófico 8.1 23.3 56.55 7.1 15 16.50
Patos Ivai NA 1.30 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71
Guaricana Litoranea 1957 7.00 Oligotrófico 7.4 27.9 83.72 12.4 12 7.95
Parigot Souza Litoranea 1970 12.00 Oligotrófico 7.7 63.6 259.20 16.9 12 13.12
Salto do Meio Litoranea NA 0.10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10
Vossoroca Litoranea 1949 5.10 Mesotrófico 7.3 39.8 156.00 21.9 14 11.74
Melissa Piriqui 1962 0.10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29
Santa Maria Piriqui NA 0.07 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40
Alagados Tibagi 1909 7.20 Oligotrófico 7.6 41.7 172.20 19.9 7 5.60
Apucaraninha Tibagi 1958 NA NA NA NA NA NA 10 2.05
Harmonia Tibagi NA NA Oligotrófico 8.3 31.0 113.30 8.6 7 24.88

A função filter() utiliza operadores lógicos (retornam VERDADEIRO ou FALSO). Para aprender sobre este operadores no R veja Operadores lógicos


Podemos realizar operações análogas para variáveis numéricas. Vamos selecionar somente os reservatórios com pH menor que \(7.0\).

res_acidos = res %>% 
  filter(pH < 7)

res_acidos
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE
Irai Iguacu 2000 15.00 Eutrófico 6.9 50.2 3.30 53.4 12 30.76
Salto do Vau Iguacu 1959 2.90 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43
Patos Ivai NA 1.30 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71
Salto do Meio Litoranea NA 0.10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10
Melissa Piriqui 1962 0.10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29
Santa Maria Piriqui NA 0.07 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40

Se quisermos pH’s menores ou iguais a \(7.0\) fazemos:

res_acidos = res %>% 
  filter(pH <= 7)

res_acidos
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE
Curucaca Iguacu 1982 2.00 Oligotrófico 7.0 32.4 125.70 4.7 16 28.73
Irai Iguacu 2000 15.00 Eutrófico 6.9 50.2 3.30 53.4 12 30.76
Salto do Vau Iguacu 1959 2.90 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43
Segredo Iguacu 1992 82.50 Oligotrófico 7.0 34.5 165.20 6.4 22 13.72
Patos Ivai NA 1.30 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71
Salto do Meio Litoranea NA 0.10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10
Melissa Piriqui 1962 0.10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29
Santa Maria Piriqui NA 0.07 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40

2.10 Adicionando ou modificando colunas

Podemos adicionar novas colunas, assim como fazemos em uma planilha excel. Temos por exemplo, o ano de formação do reservatório. Assumindo que estes dados são de 2005, podemos criar uma coluna indicando a idade do reservatório no momento da tomada de dados. Para criar uma nova coluna usamos a função mutate().

res = res %>% 
  mutate(Idade = 2005 - Fechamento)
res
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE Idade
Cavernoso Iguacu 1965 2.90 Oligotrófico 7.4 33.1 139.80 7.8 18 9.22 40
Curucaca Iguacu 1982 2.00 Oligotrófico 7.0 32.4 125.70 4.7 16 28.73 23
Foz do Areia Iguacu 1980 139.00 Oligotrófico 7.3 35.5 97.00 14.3 19 11.59 25
Irai Iguacu 2000 15.00 Eutrófico 6.9 50.2 3.30 53.4 12 30.76 5
JMF Iguacu 1970 0.45 Mesotrófico 7.3 40.2 3.70 41.2 18 5.95 35
Jordao Iguacu 1996 3.40 Oligotrófico 7.1 23.7 152.70 3.3 17 7.75 9
Passauna Iguacu 1978 14.00 Oligotrófico 8.8 125.6 526.00 15.2 11 7.51 27
Piraquara Iguacu 1979 3.30 Oligotrófico 7.1 22.8 50.67 4.5 8 4.01 26
Salto Caxias Iguacu 1998 124.00 Oligotrófico 7.3 39.6 106.00 12.1 21 20.83 7
Salto do Vau Iguacu 1959 2.90 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43 46
Salto Osorio Iguacu 1975 51.00 Oligotrófico 8.6 38.9 233.30 3.4 24 12.55 30
Salto Santiago Iguacu 1979 208.00 Oligotrófico 9.2 39.5 117.60 13.1 21 11.73 26
Segredo Iguacu 1992 82.50 Oligotrófico 7.0 34.5 165.20 6.4 22 13.72 13
Mourao Ivai 1964 11.30 Oligotrófico 8.1 23.3 56.55 7.1 15 16.50 41
Patos Ivai NA 1.30 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71 NA
Guaricana Litoranea 1957 7.00 Oligotrófico 7.4 27.9 83.72 12.4 12 7.95 48
Parigot Souza Litoranea 1970 12.00 Oligotrófico 7.7 63.6 259.20 16.9 12 13.12 35
Salto do Meio Litoranea NA 0.10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10 NA
Vossoroca Litoranea 1949 5.10 Mesotrófico 7.3 39.8 156.00 21.9 14 11.74 56
Canoas I Paranapanema 1999 30.85 Oligotrófico 7.4 63.3 234.90 9.9 35 17.95 6
Canoas II Paranapanema 1992 22.50 Oligotrófico 7.8 61.2 NA 9.0 40 13.86 13
Capivara Paranapanema 1975 419.30 Oligotrófico 7.5 58.6 196.00 5.5 34 13.04 30
Chavantes Paranapanema 1970 400.00 Oligotrófico 7.6 57.8 211.80 7.8 23 7.35 35
Rosana Paranapanema 1986 220.00 NA 7.7 58.2 202.40 NA 30 20.92 19
Salto Grande Paranapanema 1958 12.00 Oligotrófico 7.1 62.3 230.10 10.3 24 13.67 47
Taquarucu Paranapanema 1989 80.10 Oligotrófico 7.9 57.0 191.80 4.5 33 21.82 16
Melissa Piriqui 1962 0.10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29 43
Santa Maria Piriqui NA 0.07 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40 NA
Alagados Tibagi 1909 7.20 Oligotrófico 7.6 41.7 172.20 19.9 7 5.60 96
Apucaraninha Tibagi 1958 NA NA NA NA NA NA 10 2.05 47
Harmonia Tibagi NA NA Oligotrófico 8.3 31.0 113.30 8.6 7 24.88 NA

Note que aqui, nós re-escrevemos o objeto res adicionando uma coluna Idade. A partir de agora, o objeto res tem uma coluna a mais. Mas lembre-se que nossa base de dados original .csv permanece inalterada.

Podemos também fazer alterações em uma coluna existente usando a mesma função mutate. Por exemplo, a variável Area é dada em \(km^2\). Podemos transformá-la em Hectares multiplicando os valores por \(100\).

res = res %>% 
  mutate(Area = Area * 100)

res
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade P.total Riqueza CPUE Idade
Cavernoso Iguacu 1965 290 Oligotrófico 7.4 33.1 139.80 7.8 18 9.22 40
Curucaca Iguacu 1982 200 Oligotrófico 7.0 32.4 125.70 4.7 16 28.73 23
Foz do Areia Iguacu 1980 13900 Oligotrófico 7.3 35.5 97.00 14.3 19 11.59 25
Irai Iguacu 2000 1500 Eutrófico 6.9 50.2 3.30 53.4 12 30.76 5
JMF Iguacu 1970 45 Mesotrófico 7.3 40.2 3.70 41.2 18 5.95 35
Jordao Iguacu 1996 340 Oligotrófico 7.1 23.7 152.70 3.3 17 7.75 9
Passauna Iguacu 1978 1400 Oligotrófico 8.8 125.6 526.00 15.2 11 7.51 27
Piraquara Iguacu 1979 330 Oligotrófico 7.1 22.8 50.67 4.5 8 4.01 26
Salto Caxias Iguacu 1998 12400 Oligotrófico 7.3 39.6 106.00 12.1 21 20.83 7
Salto do Vau Iguacu 1959 290 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43 46
Salto Osorio Iguacu 1975 5100 Oligotrófico 8.6 38.9 233.30 3.4 24 12.55 30
Salto Santiago Iguacu 1979 20800 Oligotrófico 9.2 39.5 117.60 13.1 21 11.73 26
Segredo Iguacu 1992 8250 Oligotrófico 7.0 34.5 165.20 6.4 22 13.72 13
Mourao Ivai 1964 1130 Oligotrófico 8.1 23.3 56.55 7.1 15 16.50 41
Patos Ivai NA 130 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71 NA
Guaricana Litoranea 1957 700 Oligotrófico 7.4 27.9 83.72 12.4 12 7.95 48
Parigot Souza Litoranea 1970 1200 Oligotrófico 7.7 63.6 259.20 16.9 12 13.12 35
Salto do Meio Litoranea NA 10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10 NA
Vossoroca Litoranea 1949 510 Mesotrófico 7.3 39.8 156.00 21.9 14 11.74 56
Canoas I Paranapanema 1999 3085 Oligotrófico 7.4 63.3 234.90 9.9 35 17.95 6
Canoas II Paranapanema 1992 2250 Oligotrófico 7.8 61.2 NA 9.0 40 13.86 13
Capivara Paranapanema 1975 41930 Oligotrófico 7.5 58.6 196.00 5.5 34 13.04 30
Chavantes Paranapanema 1970 40000 Oligotrófico 7.6 57.8 211.80 7.8 23 7.35 35
Rosana Paranapanema 1986 22000 NA 7.7 58.2 202.40 NA 30 20.92 19
Salto Grande Paranapanema 1958 1200 Oligotrófico 7.1 62.3 230.10 10.3 24 13.67 47
Taquarucu Paranapanema 1989 8010 Oligotrófico 7.9 57.0 191.80 4.5 33 21.82 16
Melissa Piriqui 1962 10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29 43
Santa Maria Piriqui NA 7 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40 NA
Alagados Tibagi 1909 720 Oligotrófico 7.6 41.7 172.20 19.9 7 5.60 96
Apucaraninha Tibagi 1958 NA NA NA NA NA NA 10 2.05 47
Harmonia Tibagi NA NA Oligotrófico 8.3 31.0 113.30 8.6 7 24.88 NA

2.11 Renomeando colunas

Finalmente, podemos renomear colunas para facilitar a leitura dos dados. A coluna P.total, por exemplo, indica a quantidade de fósforo total, enquanto a variável CPUE é a captura em kg. Podemos renomear estas colunas usando a função rename:

res = res %>% 
  rename(Fosforo_total = P.total,
         Captura_kg = CPUE)

res
Reservatorio Bacia Fechamento Area Trofia pH Condutividade Alcalinidade Fosforo_total Riqueza Captura_kg Idade
Cavernoso Iguacu 1965 290 Oligotrófico 7.4 33.1 139.80 7.8 18 9.22 40
Curucaca Iguacu 1982 200 Oligotrófico 7.0 32.4 125.70 4.7 16 28.73 23
Foz do Areia Iguacu 1980 13900 Oligotrófico 7.3 35.5 97.00 14.3 19 11.59 25
Irai Iguacu 2000 1500 Eutrófico 6.9 50.2 3.30 53.4 12 30.76 5
JMF Iguacu 1970 45 Mesotrófico 7.3 40.2 3.70 41.2 18 5.95 35
Jordao Iguacu 1996 340 Oligotrófico 7.1 23.7 152.70 3.3 17 7.75 9
Passauna Iguacu 1978 1400 Oligotrófico 8.8 125.6 526.00 15.2 11 7.51 27
Piraquara Iguacu 1979 330 Oligotrófico 7.1 22.8 50.67 4.5 8 4.01 26
Salto Caxias Iguacu 1998 12400 Oligotrófico 7.3 39.6 106.00 12.1 21 20.83 7
Salto do Vau Iguacu 1959 290 Oligotrófico 6.5 23.2 279.00 11.0 8 2.43 46
Salto Osorio Iguacu 1975 5100 Oligotrófico 8.6 38.9 233.30 3.4 24 12.55 30
Salto Santiago Iguacu 1979 20800 Oligotrófico 9.2 39.5 117.60 13.1 21 11.73 26
Segredo Iguacu 1992 8250 Oligotrófico 7.0 34.5 165.20 6.4 22 13.72 13
Mourao Ivai 1964 1130 Oligotrófico 8.1 23.3 56.55 7.1 15 16.50 41
Patos Ivai NA 130 Mesotrófico 6.9 46.0 180.10 39.2 10 4.71 NA
Guaricana Litoranea 1957 700 Oligotrófico 7.4 27.9 83.72 12.4 12 7.95 48
Parigot Souza Litoranea 1970 1200 Oligotrófico 7.7 63.6 259.20 16.9 12 13.12 35
Salto do Meio Litoranea NA 10 Oligotrófico 6.9 37.4 147.10 17.1 11 16.10 NA
Vossoroca Litoranea 1949 510 Mesotrófico 7.3 39.8 156.00 21.9 14 11.74 56
Canoas I Paranapanema 1999 3085 Oligotrófico 7.4 63.3 234.90 9.9 35 17.95 6
Canoas II Paranapanema 1992 2250 Oligotrófico 7.8 61.2 NA 9.0 40 13.86 13
Capivara Paranapanema 1975 41930 Oligotrófico 7.5 58.6 196.00 5.5 34 13.04 30
Chavantes Paranapanema 1970 40000 Oligotrófico 7.6 57.8 211.80 7.8 23 7.35 35
Rosana Paranapanema 1986 22000 NA 7.7 58.2 202.40 NA 30 20.92 19
Salto Grande Paranapanema 1958 1200 Oligotrófico 7.1 62.3 230.10 10.3 24 13.67 47
Taquarucu Paranapanema 1989 8010 Oligotrófico 7.9 57.0 191.80 4.5 33 21.82 16
Melissa Piriqui 1962 10 Eutrófico 6.8 34.0 68.37 66.9 12 6.29 43
Santa Maria Piriqui NA 7 Oligotrófico 6.8 41.7 480.10 14.9 7 9.40 NA
Alagados Tibagi 1909 720 Oligotrófico 7.6 41.7 172.20 19.9 7 5.60 96
Apucaraninha Tibagi 1958 NA NA NA NA NA NA 10 2.05 47
Harmonia Tibagi NA NA Oligotrófico 8.3 31.0 113.30 8.6 7 24.88 NA

2.12 Outras operações para processamento e transformação de dados

Existem muitas outras operações possíveis para processar conjuntos de dados. A maioria faz parte do conjunto de pacotes tidyverse (veja aqui).

Neste capítulo vimos funções para:

  • Importar arquivos .csv: read_delim;

  • Verificar os tipos de dados de uma tabela: glimpse;

  • Reorganizar informações: arrange;

  • Selecionar colunas: select;

  • Filtrar linhas: filter;

  • Adicionar/modificar colunas: mutate;

  • Renomear colunas: rename.

A partir dos próximos capítulos iremos nos dedicar a aspectos da estatística descritiva, apresentando novas funções à medida que forem necessárias.