Tutorial 3 – Manipulação de dados
- Neste tutorial, não é necessário instalar o pacote
readroudplyr– 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()(egroup_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.