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)
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 |
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
dados %>%
select(Nome, Salario)
## Nome Salario
## 1 Alice 5000
## 2 Roberto 4500
## 3 Carol 5500
## 4 Juliana 4000
## 5 Juciara 6000
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
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
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
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)
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>
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>
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
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