Capítulo 3 O sistema tidyverse
Tidyverse é um conjunto de pacotes para ciência de dados. Quando instalamos o pacote tidyverse (Wickham et al. 2019) ele faz a instalação de vários pacotes relacionados: ggplot2, tibble, tidyr, readr, purrr, dplyr
Carregando os dados:
O R possui muitos dados disponíveis. Podemos carregar esses dados com a função data(). Esse arquivo iris pode ser carregado dessa maneira.
3.1 Manipulação de dados com tidyverse
Tem várias funções para manipular os dados, entre elas:
- Selecionar casos por seus valores (filter()).
- Reordenar as linhas (arrange()).
- Selecionar variáveis pelo nome (select()).
- Criar novas variáveis (mutate()).
- Colapsar valores em um resumo (summarise()).
3.2 Função filter
Definimos o objeto e depois a(s) variável(is). Nesse exemplo abaixo, filtramos os casos (linhas) em que class é igual a Iris-setosa e que sepal_w seja maior que 3.1:
## sepal_l sepal_w petal_l petal_w class
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.7 3.2 1.3 0.2 Iris-setosa
## 3 5.0 3.6 1.4 0.2 Iris-setosa
## 4 5.4 3.9 1.7 0.4 Iris-setosa
## 5 4.6 3.4 1.4 0.3 Iris-setosa
## 6 5.0 3.4 1.5 0.2 Iris-setosa
3.3 Função arrange
Com a função arrange podemos ordenar os dados, de forma crescente (default) ou descrescente (adicionando desc), por ou mais variáveis.
ordenado<-arrange(dados, desc(sepal_l))
ordenado<-arrange(dados, desc(sepal_l), desc(sepal_w))
head(ordenado)
## sepal_l sepal_w petal_l petal_w class
## 1 7.9 3.8 6.4 2.0 Iris-virginica
## 2 7.7 3.8 6.7 2.2 Iris-virginica
## 3 7.7 3.0 6.1 2.3 Iris-virginica
## 4 7.7 2.8 6.7 2.0 Iris-virginica
## 5 7.7 2.6 6.9 2.3 Iris-virginica
## 6 7.6 3.0 6.6 2.1 Iris-virginica
3.4 Função select
Com a função select podemos selecionar variáveis (colunas). Podemos especificar uma coluna ou várias colunas.
## sepal_l sepal_w petal_l petal_w class
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa
## petal_w
## 1 0.2
## 2 0.2
## 3 0.2
## 4 0.2
## 5 0.2
## 6 0.4
3.5 Função mutate e transmutate
A função mutate cria uma nova coluna. A nova coluna será adicionada ao final do objeto. Com a função transmutate, o objeto terá apenas a(s) nova(s) coluna(s). No exemplo abaixo, foram criadas 2 novas colunas, indice e indice2. O conteúdo dessas novas colunas será a multiplicação dos valores de outras variáveis.
## sepal_l sepal_w petal_l petal_w class indice indice2
## 1 5.1 3.5 1.4 0.2 Iris-setosa 17.85 0.28
## 2 4.9 3.0 1.4 0.2 Iris-setosa 14.70 0.28
## 3 4.7 3.2 1.3 0.2 Iris-setosa 15.04 0.26
## 4 4.6 3.1 1.5 0.2 Iris-setosa 14.26 0.30
## 5 5.0 3.6 1.4 0.2 Iris-setosa 18.00 0.28
## 6 5.4 3.9 1.7 0.4 Iris-setosa 21.06 0.68
3.6 Funções group_by e summarise
Essas duas funções são muito úteis quando usadas em conjunto. Na função group_by, especificamos o objeto e uma variável categórica. Em summarise podemos usar uma função como mean, assim teremos a média da variável especificada, separada pela variável categórica usada em group_by:
## # A tibble: 3 × 2
## class sepala
## <chr> <dbl>
## 1 Iris-setosa 5.01
## 2 Iris-versicolor 5.94
## 3 Iris-virginica 6.59
3.7 Funções pull e distinct
Para extrair uma coluna em forma de vetor:
## [1] 5.1 4.9 4.7 4.6 5.0 5.4 4.6 5.0 4.4 4.9 5.4 4.8 4.8 4.3 5.8 5.7 5.4 5.1
## [19] 5.7 5.1 5.4 5.1 4.6 5.1 4.8 5.0 5.0 5.2 5.2 4.7 4.8 5.4 5.2 5.5 4.9 5.0
## [37] 5.5 4.9 4.4 5.1 5.0 4.5 4.4 5.0 5.1 4.8 5.1 4.6 5.3 5.0 7.0 6.4 6.9 5.5
## [55] 6.5 5.7 6.3 4.9 6.6 5.2 5.0 5.9 6.0 6.1 5.6 6.7 5.6 5.8 6.2 5.6 5.9 6.1
## [73] 6.3 6.1 6.4 6.6 6.8 6.7 6.0 5.7 5.5 5.5 5.8 6.0 5.4 6.0 6.7 6.3 5.6 5.5
## [91] 5.5 6.1 5.8 5.0 5.6 5.7 5.7 6.2 5.1 5.7 6.3 5.8 7.1 6.3 6.5 7.6 4.9 7.3
## [109] 6.7 7.2 6.5 6.4 6.8 5.7 5.8 6.4 6.5 7.7 7.7 6.0 6.9 5.6 7.7 6.3 6.7 7.2
## [127] 6.2 6.1 6.4 7.2 7.4 7.9 6.4 6.3 6.1 7.7 6.3 6.4 6.0 6.9 6.7 6.9 5.8 6.8
## [145] 6.7 6.7 6.3 6.5 6.2 5.9
Remove linhas com valores repetidos:
## sepal_l
## 1 5.1
## 2 4.9
## 3 4.7
## 4 4.6
## 5 5.0
## 6 5.4
Se quiser manter todas as colunas:
3.8 Pipes
Pipes (%>%) é uma ferramenta poderosa para expressar claramente uma sequência de várias operações. Está disponível nos pacotes do sistema tidyverse.
dados5<-dados%>%
filter(class=="Iris-setosa")%>%
mutate(indice=sepal_l*sepal_w)%>%
arrange(indice)
head(dados5)
## sepal_l sepal_w petal_l petal_w class indice
## 1 4.5 2.3 1.3 0.3 Iris-setosa 10.35
## 2 4.4 2.9 1.4 0.2 Iris-setosa 12.76
## 3 4.3 3.0 1.1 0.1 Iris-setosa 12.90
## 4 4.4 3.0 1.3 0.2 Iris-setosa 13.20
## 5 4.4 3.2 1.3 0.2 Iris-setosa 14.08
## 6 4.6 3.1 1.5 0.2 Iris-setosa 14.26
3.10 Tibble
Uma tibble é semelhante ao data frame. Pode converter um data frame em tibble assim:
## sepal_l sepal_w petal_l petal_w class
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3.0 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5.0 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa
## # A tibble: 6 × 5
## sepal_l sepal_w petal_l petal_w class
## <dbl> <dbl> <dbl> <dbl> <chr>
## 1 5.1 3.5 1.4 0.2 Iris-setosa
## 2 4.9 3 1.4 0.2 Iris-setosa
## 3 4.7 3.2 1.3 0.2 Iris-setosa
## 4 4.6 3.1 1.5 0.2 Iris-setosa
## 5 5 3.6 1.4 0.2 Iris-setosa
## 6 5.4 3.9 1.7 0.4 Iris-setosa
Uma das principais diferenças entre tibbles e data frames é que tibbles não convertem automaticamente colunas de texto em fatores. Isso significa que você pode ver os dados exatamente como eles estão armazenados, o que pode ser útil para depurar e analisar dados.
Outra diferença entre tibbles e data frames é que tibbles imprimem com mais linhas e colunas do que cabem na tela. Isso torna mais fácil ver todos os dados em um tibble de uma só vez, sem ter que rolar para cima e para baixo.
Por fim, tibbles incluem algumas estatísticas básicas sobre cada coluna, como a média, a mediana e o desvio padrão. Isso pode ser útil para obter uma visão geral rápida dos dados em um tibble.
3.11 Juntar dados
Juntar dados de diferentes planilhas é uma coisa muito útil, muitas vezes temos diversas planilhas com diferentes informações dos mesmos dados. Juntar esses dados é muito fácil, contanto que tenhamos uma coluna de identificação.
No pacote dplyr temos as seguintes funções:
- inner_join - Uma junção interna combina pares de observações sempre que suas chaves são iguais
- left_join - mantém todas as observações em x.
- right_join - mantém todas as observações em y.
- full_join - mantém todas as observações em x e y.
Tem outras funções interessantes, como recode e case_when(), para saber mais consulte Wickham, Çetinkaya-Rundel, and Grolemund (2023)