Tutorial 3 – Manipulação de dados

ImportantePacotes
  • Neste tutorial, não é necessário instalar o pacote readr ou dplyr – eles já estão disponíveis e carregados no ambiente do navegador.

Introdução

Neste tutorial, praticaremos o básico sobre manipulação de dados em R, particularmente usando um dos pacotes mais flexíveis e populares para isso: o dplyr. Nosso foco será aprender a usar os quatro verbos mais comuns de manipulação usando dplyr:

  • filter(), para fatiar dados horizontalmente;
  • select(), para fatiar dados verticalmente;
  • mutate(), para criar ou modificar colunas;
  • summarise() (e group_by()), para resumir colunas.

Dados

Vamos carregar novamente a base de letalidade violenta no estado do Rio de Janeiro do tutorial anterior para praticar manipulação de dados.

O pipe |>

O pipe |> passa o resultado de uma função para a próxima – é mais ou menos como separar processos em etapas. Exemplo:

Exercício: use o pipe para passar letalidade para a função summary().

filter(): filtrar linhas

filter() é uma das operações mais comuns em análise de dados. Resumidamente, ela serve para selecionar algumas das linhas de um data.frame com base em uma ou mais condições:

É possível também intercalar condições usando & (e) oou vírgula:

Exercício: filtre apenas observações de area_geografica que indiquem a Capital do estado.

Exercício: filtre as linhas em que delito seja diferente de Letalidade Violenta a partir de 2010.

select(): selecionar colunas

select() escolhe quais colunas manter, isto é, fatia verticalmente o data.frame:

Exercício: selecione apenas ano, delito e taxa_100mil.

mutate(): criar colunas

mutate(), por sua vez, serve para criar ou modificar colunas. O nome da nova coluna é o nome do argumento, e o valor é a expressão que você quiser. Por exemplo, o código abaixo cria uma nova coluna contagem_mil que é a contagem de delitos multiplicada por 1000:

mutate() é flexível o suficiente para permitir criar colunas com base em operações envolvendo outras colunas, como o número casos de letalidade per capita (o que nada mais é do que a divisão da contagem de casos pela população):

Podemos, inclusive, transformar essa taxa per capita em uma taxa por 100 mil habitantes multiplicando o resultado por 100 mil:

Não surpreendentemente, o resultado é o mesmo da coluna taxa_100mil que já existia na base – mutate() funciona.

mutate(): operadores lógicos

Uma das formas mais comuns de usar mutate() é criar colunas condicionalmente, isto é, atribuindo a ela valores a depender dos valores de outras colunas. Por exemplo, podemos criar uma coluna pos2000 que indique se o ano é posterior a 2000:

Note que, na coluna resunltante, temos FALSE para anos anteriores a 2000 e TRUE para anos posteriores. Se usarmos outra função, ifelse, podemos criar uma coluna categórica que indique se o ano é anterior ou posterior a 2000:

Outra função útil para criar colunas categóricas é case_when(), que é mais flexível do que ifelse() para lidar com múltiplas condições. Por exemplo, podemos criar uma coluna periodo que indique se o ano é anterior a 1990, entre 1990 e 2010, ou posterior a 2010:

Para case_when() funcionar, é preciso usar ~ para separar a condição do valor a ser atribuído. Condições, como dá para ver também pelo exemplo, precisam ser exaustivas – caso contrário, o resultado será NA para as linhas que não se encaixarem em nenhuma das condições.

Exercício: crie uma coluna que indique se a taxa de letalidade por 100 mil habitantes é alta (acima de 20) ou baixa (20 ou abaixo).

summarise() e group_by(): resumir dados

A última das operações que veremos faz algo bem diferente do que vimos até então: ela não fatia ou muda um data.frame; ela o resume. Um exemplo bem simples: cálculo da média da variável contagem:

Outro exemplo: cálculo do número de observações (linhas) na base:

Mais útil do que colapsar uma base inteira, summarise() é frequentemente usado em conjunto com group_by(), que agrupa os dados por uma ou mais variáveis. Por exemplo, para calcular a média de contagem por tipo de área geográfica, usamos:

Ou por ano:

Exercício: calcule a média de taxa_100mil por area_geografica.

Exercício: conte quantas observações existem por ano.

arrange(): ordenar dados

arrange() ordena as linhas. Use desc() para ordem decrescente.

Exercício: ordene letalidade por ano (crescente) e mostre 8 linhas.

Desafios integrando funções

No mais das vezes, precisamos combinar diferentes verbos de manipulação para obter o resultado desejado. Um exemplo:

Desafio: reproduza o pipeline acima, mas filtre pela variável ano para mostrar apenas os anos posteriores a 2010.

Desafio: calcule, por década, o valor máximo de contagem.