Exercícos de aplicação da biblioteca dplyr.

A biblioteca dplyr é utilizada para manipular dados e por isso é muito aplicada para análise de dados com as funções estatísticas, na construção de gráficos, juntamente com o ggplot, e para criação de painéis de BI, juntamente com o Shiny.

Não esqueça que para executar o carregamento do pacote com o comando:

library(dplyr)

Exercício 1

Considere o seguinte dataframe chamado “dados” – crie no seu computador:

dados <- data.frame(
  Nome = c("Alice", "Roberto", "Carol", "Juliana", "Juciara"),
  Idade = c(28, 25, 31, 23, 27),
  Cidade = c("São Paulo", "Rio de Janeiro", "Belo Horizonte", "Brasília", "Salvador"),
  Salario = c(5000, 4500, 5500, 4000, 6000)
)

kable(dados)
Nome Idade Cidade Salario
Alice 28 São Paulo 5000
Roberto 25 Rio de Janeiro 4500
Carol 31 Belo Horizonte 5500
Juliana 23 Brasília 4000
Juciara 27 Salvador 6000
  1. Use a função filter() para filtrar as pessoas com idade maior ou igual a 25 anos.
dados %>%
  filter(Idade >= 25)
##      Nome Idade         Cidade Salario
## 1   Alice    28      São Paulo    5000
## 2 Roberto    25 Rio de Janeiro    4500
## 3   Carol    31 Belo Horizonte    5500
## 4 Juciara    27       Salvador    6000


  1. Use a função select() para selecionar apenas as colunas Nome e Salario do dataframe.
dados %>%
  select(Nome, Salario)
##      Nome Salario
## 1   Alice    5000
## 2 Roberto    4500
## 3   Carol    5500
## 4 Juliana    4000
## 5 Juciara    6000
  1. Use a função mutate() para criar uma nova coluna chamada “Salario_anual” que represente o salário anual (salario * 12) de cada pessoa.
resultado <- dados %>%
  mutate(Salario_anual = Salario * 12)

resultado
##      Nome Idade         Cidade Salario Salario_anual
## 1   Alice    28      São Paulo    5000         60000
## 2 Roberto    25 Rio de Janeiro    4500         54000
## 3   Carol    31 Belo Horizonte    5500         66000
## 4 Juliana    23       Brasília    4000         48000
## 5 Juciara    27       Salvador    6000         72000


### Exercício 2
Considere o seguinte dataframe chamado “vendas”:

vendas <- data.frame(
  Produto = c("A", "B", "C", "A", "B", "C"),
  Vendedor = c("Alice", "Roberto", "Carol", "Juliana", "Juciara", "Zelma"),
  Quantidade = c(10, 5, 8, 12, 7, 15),
  Valor = c(100, 150, 120, 90, 200, 80)
)

vendas
##   Produto Vendedor Quantidade Valor
## 1       A    Alice         10   100
## 2       B  Roberto          5   150
## 3       C    Carol          8   120
## 4       A  Juliana         12    90
## 5       B  Juciara          7   200
## 6       C    Zelma         15    80
  1. Use a função group_by() para agrupar as vendas por produto.
vendas_por_produto <- vendas %>%
  group_by(Produto)

vendas_por_produto
## # A tibble: 6 x 4
## # Groups:   Produto [3]
##   Produto Vendedor Quantidade Valor
##   <chr>   <chr>         <dbl> <dbl>
## 1 A       Alice            10   100
## 2 B       Roberto           5   150
## 3 C       Carol             8   120
## 4 A       Juliana          12    90
## 5 B       Juciara           7   200
## 6 C       Zelma            15    80


b. Use a função summarize() para calcular a quantidade total de cada produto vendido e o valor total de vendas para cada produto.

vendas %>%
  group_by(Produto) %>%
  summarize(Quantidade_total = sum(Quantidade), Valor_total = sum(Valor))
## # A tibble: 3 x 3
##   Produto Quantidade_total Valor_total
##   <chr>              <dbl>       <dbl>
## 1 A                     22         190
## 2 B                     12         350
## 3 C                     23         200
  1. Use a função arrange() para ordenar as vendas por produto em ordem decrescente de valor total de vendas.
vendas %>%
  group_by(Produto) %>%
  summarize(Quantidade_total = sum(Quantidade), Valor_total = sum(Valor)) %>%
  arrange(desc(Valor_total))
## # A tibble: 3 x 3
##   Produto Quantidade_total Valor_total
##   <chr>              <dbl>       <dbl>
## 1 B                     12         350
## 2 C                     23         200
## 3 A                     22         190


Exercício 3

Utilizando a base de dados “storms” desenvolva os exercícios abaixo. Lembre-se que para utilizar a base de dados, é necessário “chama-la” com o comando:

data(mtcars)


  1. Selecione os 10 últimos registros de todas as colunas exceto as colunas lat e long.
storms %>%
select(-c(lat, long)) %>%
tail(10)
## # A tibble: 10 x 11
##    name   year month   day  hour status         category  wind pressure
##    <chr> <dbl> <dbl> <int> <dbl> <fct>             <dbl> <int>    <int>
##  1 Wanda  2021    11     5    18 tropical storm       NA    45      996
##  2 Wanda  2021    11     6     0 tropical storm       NA    45      999
##  3 Wanda  2021    11     6     6 tropical storm       NA    45     1000
##  4 Wanda  2021    11     6    12 tropical storm       NA    40     1001
##  5 Wanda  2021    11     6    18 tropical storm       NA    35     1002
##  6 Wanda  2021    11     7     0 tropical storm       NA    35     1003
##  7 Wanda  2021    11     7     6 tropical storm       NA    35     1004
##  8 Wanda  2021    11     7    12 other low            NA    35     1006
##  9 Wanda  2021    11     7    18 other low            NA    40     1006
## 10 Wanda  2021    11     8     0 other low            NA    40     1006
## # i 2 more variables: tropicalstorm_force_diameter <int>,
## #   hurricane_force_diameter <int>
  1. Selecione as 6 primeiras linhas de todas a colunas que contenham dados numéricos
storms %>% 
  select_if(is.numeric) %>% 
  head
## # A tibble: 6 x 11
##    year month   day  hour   lat  long category  wind pressure
##   <dbl> <dbl> <int> <dbl> <dbl> <dbl>    <dbl> <int>    <int>
## 1  1975     6    27     0  27.5 -79         NA    25     1013
## 2  1975     6    27     6  28.5 -79         NA    25     1013
## 3  1975     6    27    12  29.5 -79         NA    25     1013
## 4  1975     6    27    18  30.5 -79         NA    25     1013
## 5  1975     6    28     0  31.5 -78.8       NA    25     1012
## 6  1975     6    28     6  32.4 -78.7       NA    25     1012
## # i 2 more variables: tropicalstorm_force_diameter <int>,
## #   hurricane_force_diameter <int>


  1. Selecione as 3 primeiras linhas da coluna cujo nome começa com a letra “n”.
storms %>% 
  select(starts_with("l")) %>% 
  head(3)
## # A tibble: 3 x 2
##     lat  long
##   <dbl> <dbl>
## 1  27.5   -79
## 2  28.5   -79
## 3  29.5   -79


d. Selecione todos os nomes das tempestades.

storms %>% 
  select(name) %>% 
  distinct
## # A tibble: 258 x 1
##    name    
##    <chr>   
##  1 Amy     
##  2 Blanche 
##  3 Caroline
##  4 Doris   
##  5 Eloise  
##  6 Faye    
##  7 Gladys  
##  8 Hallie  
##  9 Belle   
## 10 Dottie  
## # i 248 more rows


e. Apresente as tempestades e seus ventos máximos e as ordene dos ventos mais intensos aos ventos mais brandos. Apresente as 15 com ventos mais intensos.

storms %>%
  arrange(desc(wind)) %>%
  select(name, wind) %>%
  distinct %>%
  head(15)
## # A tibble: 15 x 2
##    name     wind
##    <chr>   <int>
##  1 Allen     165
##  2 Gilbert   160
##  3 Wilma     160
##  4 Dorian    160
##  5 Allen     155
##  6 Gilbert   155
##  7 Mitch     155
##  8 Rita      155
##  9 Irma      155
## 10 Dorian    155
## 11 Anita     150
## 12 David     150
## 13 Allen     150
## 14 Andrew    150
## 15 Mitch     150
  1. Apresente os nomes das tempestades, sua intensidade mínima de vento e sua pressão máxima, ocorridas em 2016.
storms %>% 
  filter(year == 2016)  %>%
  select(name, year, wind, pressure) %>%
  group_by(name) %>%
    filter(wind == min(wind)) %>%
    filter(pressure == max(pressure))  %>%
    distinct()
## # A tibble: 16 x 4
## # Groups:   name [16]
##    name      year  wind pressure
##    <chr>    <dbl> <int>    <int>
##  1 Alex      2016    40     1010
##  2 Bonnie    2016    20     1010
##  3 Colin     2016    30     1005
##  4 Danielle  2016    20     1013
##  5 Earl      2016    25     1008
##  6 Fiona     2016    20     1016
##  7 Gaston    2016    20     1009
##  8 Eight     2016    20     1012
##  9 Hermine   2016    20     1010
## 10 Ian       2016    35     1007
## 11 Julia     2016    20     1012
## 12 Karl      2016    20     1010
## 13 Lisa      2016    25     1008
## 14 Matthew   2016    50     1009
## 15 Nicole    2016    35     1007
## 16 Otto      2016    20     1006
# Abaixo errado porque existe tempestade cujo vento é minimo mas não tem a pressão máxima - as condições são simultâneas  
storms %>% 
  filter(year == 2016)  %>%
  select(name, year, wind, pressure) %>%
  group_by(name) %>%
    filter(wind == min(wind) | pressure == max(pressure)) %>%
    distinct()
## # A tibble: 32 x 4
## # Groups:   name [16]
##    name      year  wind pressure
##    <chr>    <dbl> <int>    <int>
##  1 Alex      2016    40     1010
##  2 Bonnie    2016    20     1008
##  3 Bonnie    2016    20     1009
##  4 Bonnie    2016    20     1010
##  5 Bonnie    2016    25     1020
##  6 Colin     2016    30     1005
##  7 Colin     2016    35     1005
##  8 Danielle  2016    20     1013
##  9 Earl      2016    25     1008
## 10 Fiona     2016    20     1014
## # i 22 more rows