Essa pergunta foi enviada na aula sobre ggplot2, no curso R para Ciência de Dados I.
Porque que esse código não funciona para filtrar os 15 diretores que mais dirigiram filmes?
# Carregar pacotes --------------------------------------------------------
library(tidyverse)
# Ler base IMDB -----------------------------------------------------------
imdb <- readr::read_csv("https://raw.githubusercontent.com/curso-r/main-r4ds-1/master/dados/imdb.csv")
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> titulo = col_character(),
#> ano = col_double(),
#> diretor = col_character(),
#> duracao = col_double(),
#> cor = col_character(),
#> generos = col_character(),
#> pais = col_character(),
#> classificacao = col_character(),
#> orcamento = col_double(),
#> receita = col_double(),
#> nota_imdb = col_double(),
#> likes_facebook = col_double(),
#> ator_1 = col_character(),
#> ator_2 = col_character(),
#> ator_3 = col_character()
#> )
imdb <- imdb %>% mutate(lucro = receita - orcamento)
# Box plot do lucro dos 15 diretores que mais dirigiram filmes
imdb %>%
filter(!is.na(diretor)) %>%
group_by(diretor) %>%
summarise(diretor,
n_numbers_top_15 = n()) %>%
filter(n_numbers_top_15 >= 15) %>%
ggplot() +
geom_boxplot(aes(x = diretor, y = lucro))
#> `summarise()` has grouped output by 'diretor'. You can override using the `.groups` argument.
#> Error in FUN(X[[i]], ...): objeto 'lucro' não encontrado
Created on 2021-03-13 by the reprex package (v1.0.0)
Olá!
O código enviado tem algumas possibilidades de melhorias:
- Os dados foram agrupados por diretor, então não é necessário indicar diretor no summarize novamente.
- O filtro está filtrando diretores com mais de 15 filmes dirigidos, não os 15 diretores com mais filmes dirigidos.
- Como o lucro não está presente no summarize, ao tentar usar essa variável no boxplot, ela não é encontrada.
A forma que pensei de realizar o gráfico que você deseja é essa:
# Carregar pacotes --------------------------------------------------------
library(tidyverse)
# Ler base IMDB -----------------------------------------------------------
imdb <- readr::read_csv("https://raw.githubusercontent.com/curso-r/main-r4ds-1/master/dados/imdb.csv")
#>
#> ── Column specification ────────────────────────────────────────────────────────
#> cols(
#> titulo = col_character(),
#> ano = col_double(),
#> diretor = col_character(),
#> duracao = col_double(),
#> cor = col_character(),
#> generos = col_character(),
#> pais = col_character(),
#> classificacao = col_character(),
#> orcamento = col_double(),
#> receita = col_double(),
#> nota_imdb = col_double(),
#> likes_facebook = col_double(),
#> ator_1 = col_character(),
#> ator_2 = col_character(),
#> ator_3 = col_character()
#> )
imdb <- imdb %>% mutate(lucro = receita - orcamento)
# Box plot do lucro dos 15 diretores que mais dirigiram filmes
# Primeiro vamos criar uma base contendo apenas
# os 15 diretores que mais dirigiram filmes
diretores_top_15 <- imdb %>%
filter(!is.na(diretor)) %>%
group_by(diretor) %>%
summarise(n_numbers_top_15 = n()) %>%
top_n(15)
#> Selecting by n_numbers_top_15
diretores_top_15
#> # A tibble: 15 x 2
#> diretor n_numbers_top_15
#> <chr> <int>
#> 1 Barry Levinson 13
#> 2 Clint Eastwood 20
#> 3 Kevin Smith 12
#> 4 Martin Scorsese 20
#> 5 Michael Bay 12
#> 6 Renny Harlin 14
#> 7 Ridley Scott 14
#> 8 Robert Rodriguez 12
#> 9 Robert Zemeckis 13
#> 10 Ron Howard 12
#> 11 Spike Lee 16
#> 12 Steven Soderbergh 14
#> 13 Steven Spielberg 24
#> 14 Tim Burton 14
#> 15 Woody Allen 18
# Usamos essa base criada, para filtrar a base imdb
# e então criamos o boxplot
imdb %>%
filter(diretor %in% diretores_top_15$diretor) %>%
ggplot() +
geom_boxplot(aes(y = diretor, x = lucro))
#> Warning: Removed 12 rows containing non-finite values (stat_boxplot).
Created on 2021-03-13 by the reprex package (v1.0.0)
imdb %>%
filter(!is.na(diretor)) %>%
group_by(diretor) %>%
filter(n() >= 15) %>% # filtra a base para os diretores com 15 ou mais filme
ggplot() +
geom_boxplot(aes(x = diretor, y = lucro))