Familiarização com o dplyr - Exercício 1

Hanna Rodrigues Ferreira

01 abril 2021

Exercícios a seguir retirados de https://livro.curso-r.com/7-2-dplyr.html

#install.packages("dplyr")
library(dplyr)

Utilizaremos a base imdb nos exercícios a seguir.

imdb <- readr::read_rds("imdb.rds")

Selecionando colunas

a função glimpse() do pacote dplyr printa uma versão transposta da base. É útil para ter uma visão geral das colunas e seus tipos de dados.

glimpse(imdb)
## Rows: 3,807
## Columns: 15
## $ titulo         <chr> "Avatar ", "Pirates of the Caribbean: At World's End ",~
## $ ano            <int> 2009, 2007, 2012, 2012, 2007, 2010, 2015, 2016, 2006, 2~
## $ diretor        <chr> "James Cameron", "Gore Verbinski", "Christopher Nolan",~
## $ duracao        <int> 178, 169, 164, 132, 156, 100, 141, 183, 169, 151, 150, ~
## $ cor            <chr> "Color", "Color", "Color", "Color", "Color", "Color", "~
## $ generos        <chr> "Action|Adventure|Fantasy|Sci-Fi", "Action|Adventure|Fa~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "A partir de 13 anos", "A partir de 13 anos", "A partir~
## $ orcamento      <int> 237000000, 300000000, 250000000, 263700000, 258000000, ~
## $ receita        <int> 760505847, 309404152, 448130642, 73058679, 336530303, 2~
## $ nota_imdb      <dbl> 7.9, 7.1, 8.5, 6.6, 6.2, 7.8, 7.5, 6.9, 6.1, 7.3, 6.5, ~
## $ likes_facebook <int> 33000, 0, 164000, 24000, 0, 29000, 118000, 197000, 0, 5~
## $ ator_1         <chr> "CCH Pounder", "Johnny Depp", "Tom Hardy", "Daryl Sabar~
## $ ator_2         <chr> "Joel David Moore", "Orlando Bloom", "Christian Bale", ~
## $ ator_3         <chr> "Wes Studi", "Jack Davenport", "Joseph Gordon-Levitt", ~

Podemos utilizar o select() para criar uma tabela alocada em imdb_simples com apenas as colunas titulo, ano e nota_imdb.

imdb_simples <- select(imdb, titulo, ano, nota_imdb)

glimpse(imdb_simples)
## Rows: 3,807
## Columns: 3
## $ titulo    <chr> "Avatar ", "Pirates of the Caribbean: At World's End ", "The~
## $ ano       <int> 2009, 2007, 2012, 2012, 2007, 2010, 2015, 2016, 2006, 2006, ~
## $ nota_imdb <dbl> 7.9, 7.1, 8.5, 6.6, 6.2, 7.8, 7.5, 6.9, 6.1, 7.3, 6.5, 7.2, ~

Com o ajudante contains() podemos selecionar as colunas que contém “ator” no nome, neste caso ator_1, ator_2 e ator_3.

glimpse( select(imdb, contains("ator")) )
## Rows: 3,807
## Columns: 3
## $ ator_1 <chr> "CCH Pounder", "Johnny Depp", "Tom Hardy", "Daryl Sabara", "J.K~
## $ ator_2 <chr> "Joel David Moore", "Orlando Bloom", "Christian Bale", "Samanth~
## $ ator_3 <chr> "Wes Studi", "Jack Davenport", "Joseph Gordon-Levitt", "Polly W~

Com apenas o conhecimento da função select() e seus ajudantes temos diversas formas de retornar a base sem as colunas ator_1, ator_2 e ator_3.

A seguir temos alguns exemplos:

# caso quiséssemos retirar muitas colunas, seria inviável
select(imdb, -ator_1, -ator_2, -ator_3)

# é útil mas devemos nos atentar que as colunas devem ser consecutivas
select(imdb, -(ator_1 : ator_3)) 

# não funcionaria se quiséssemos retirar uma coluna "idade_ator"
select(imdb, -starts_with("ator")) 

# não funcionaria se quiséssemos manter uma coluna "idade_ator"
select(imdb, -contains("ator"))
## Rows: 3,807
## Columns: 12
## $ titulo         <chr> "Avatar ", "Pirates of the Caribbean: At World's End ",~
## $ ano            <int> 2009, 2007, 2012, 2012, 2007, 2010, 2015, 2016, 2006, 2~
## $ diretor        <chr> "James Cameron", "Gore Verbinski", "Christopher Nolan",~
## $ duracao        <int> 178, 169, 164, 132, 156, 100, 141, 183, 169, 151, 150, ~
## $ cor            <chr> "Color", "Color", "Color", "Color", "Color", "Color", "~
## $ generos        <chr> "Action|Adventure|Fantasy|Sci-Fi", "Action|Adventure|Fa~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "A partir de 13 anos", "A partir de 13 anos", "A partir~
## $ orcamento      <int> 237000000, 300000000, 250000000, 263700000, 258000000, ~
## $ receita        <int> 760505847, 309404152, 448130642, 73058679, 336530303, 2~
## $ nota_imdb      <dbl> 7.9, 7.1, 8.5, 6.6, 6.2, 7.8, 7.5, 6.9, 6.1, 7.3, 6.5, ~
## $ likes_facebook <int> 33000, 0, 164000, 24000, 0, 29000, 118000, 197000, 0, 5~

Ordenando a base

Podemos ordenar os filmes utilizando o arrange(), em ordem crescente de duração e decrescente de ano com o auxiliar desc().

filmes_ordenados <- arrange(imdb, duracao, desc(ano))

glimpse(filmes_ordenados)
## Rows: 3,807
## Columns: 15
## $ titulo         <chr> "The Touch ", "Robot Chicken ", "Vessel ", "Wal-Mart: T~
## $ ano            <int> 2007, NA, 2012, 2005, NA, NA, NA, NA, NA, NA, NA, NA, 1~
## $ diretor        <chr> "Jane Clark", NA, "Clark Baker", "Robert Greenwald", NA~
## $ duracao        <int> 7, 11, 14, 20, 22, 22, 22, 22, 22, 22, 23, 23, 25, 25, ~
## $ cor            <chr> "Color", "Color", "Color", "Color", "Color", "Color", "~
## $ generos        <chr> "Romance|Short", "Animation|Comedy", "Horror|Sci-Fi|Sho~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "Outros", "Outros", "Outros", "Outros", "Outros", "Outr~
## $ orcamento      <int> 13000, NA, NA, 1500000, NA, 3000000, NA, NA, NA, NA, NA~
## $ receita        <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,~
## $ nota_imdb      <dbl> 5.2, 7.8, 6.2, 6.8, 7.3, 6.6, 6.7, 8.8, 8.1, 8.2, 7.9, ~
## $ likes_facebook <int> 30, 1000, 14, 0, 0, 990, 0, 0, 558, 526, 2000, 325, 0, ~
## $ ator_1         <chr> "Necar Zadegan", "Matthew Senreich", "Taylor Pigeon", "~
## $ ator_2         <chr> "Traci Dinwiddie", "Seth Green", "Alan Pietruszewski", ~
## $ ator_3         <chr> "Elea Oberon", "Breckin Meyer", "Whit Spurgeon", "Matt ~

É possível então, selecionar colunas e ordenar esta seleção, como mostra o exemplo:

head( arrange(select(imdb, titulo, orcamento), desc(orcamento)) )
titulo orcamento
Pirates of the Caribbean: At World’s End 300000000
John Carter 263700000
Tangled 260000000
Spider-Man 3 258000000
Spider-Man 3 258000000
The Dark Knight Rises 250000000

O pipe em ação

Podemos aplicar diversas função a um mesmo objeto utilizando o pipe %>%

filmes_pb <- 
  imdb %>% 
    filter(cor == "Black and White")

glimpse(filmes_pb)
## Rows: 149
## Columns: 15
## $ titulo         <chr> "Pearl Harbor ", "The Aviator ", "Ali ", "Eragon ", "Se~
## $ ano            <int> 2001, 2004, 2001, 2006, 2003, NA, 2009, 2003, 2011, 200~
## $ diretor        <chr> "Michael Bay", "Martin Scorsese", "Michael Mann", "Stef~
## $ duracao        <int> 184, 170, 165, 104, 140, 25, 118, 110, 146, 130, 102, 1~
## $ cor            <chr> "Black and White", "Black and White", "Black and White"~
## $ generos        <chr> "Action|Drama|History|Romance|War", "Biography|Drama", ~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "A partir de 13 anos", "A partir de 13 anos", "A partir~
## $ orcamento      <int> 140000000, 110000000, 107000000, 100000000, 87000000, N~
## $ receita        <int> 198539855, 102608827, 58183966, 75030163, 120147445, NA~
## $ nota_imdb      <dbl> 6.1, 7.5, 6.8, 5.1, 7.3, 7.6, 5.8, 5.8, 7.2, 6.4, 6.5, ~
## $ likes_facebook <int> 0, 0, 0, 0, 0, 0, 0, 0, 28000, 0, 32000, 10000, 0, 5900~
## $ ator_1         <chr> "Jennifer Garner", "Leonardo DiCaprio", "Will Smith", "~
## $ ator_2         <chr> "Jaime King", "Adam Scott", "Jada Pinkett Smith", "Ed S~
## $ ator_3         <chr> "Mako", "Frances Conroy", "Joe Morton", "Gary Lewis", "~

Podemos utilizar a função filter() para filtrar as linhas, mantendo assim as que concordem com as condições de entrada.

Tal como filmes com 90 minutos ou menos de duração e nota no imdb maior do que 8.5, como no exemplo a seguir:

curtos_legais <-
  imdb %>%
    filter(duracao <= 90, nota_imdb > 8.5)

glimpse(curtos_legais)
## Rows: 13
## Columns: 15
## $ titulo         <chr> "Hannibal ", "Daredevil ", "Friday Night Lights ", "The~
## $ ano            <int> NA, NA, NA, NA, NA, NA, NA, 2015, 2016, 2016, 1936, 194~
## $ diretor        <chr> NA, NA, NA, NA, NA, NA, NA, "Mike Mayhall", "Mitchell A~
## $ duracao        <int> 44, 54, 44, 30, 22, 55, 53, 88, 87, 90, 87, 82, 78
## $ cor            <chr> "Color", NA, "Color", "Black and White", "Color", "Colo~
## $ generos        <chr> "Crime|Drama|Horror|Mystery|Thriller", "Action|Adventur~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "Outros", "Outros", "Outros", "Outros", "Outros", "Outr~
## $ orcamento      <int> NA, NA, NA, NA, NA, NA, NA, 5000000, NA, 17000000, 1500~
## $ receita        <int> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 163245, NA, NA
## $ nota_imdb      <dbl> 8.6, 8.8, 8.7, 8.7, 8.8, 8.6, 9.0, 8.6, 8.7, 9.1, 8.6, ~
## $ likes_facebook <int> 59000, 55000, 0, 459, 0, 31000, 61000, 49, 8, 0, 0, 230~
## $ ator_1         <chr> "Caroline Dhavernas", "Elden Henson", "Zach Gilford", "~
## $ ator_2         <chr> "Scott Thompson", "Royce Johnson", "Aimee Teegarden", "~
## $ ator_3         <chr> "Hettienne Park", "Charlie Cox", "Scott Porter", "Joyce~

filmes filmes coloridos anteriores a 1950:

glimpse(
  imdb %>%
    filter(cor == "Color", ano < 1950)
  )
## Rows: 14
## Columns: 15
## $ titulo         <chr> "Pinocchio ", "Duel in the Sun ", "Tycoon ", "State Fai~
## $ ano            <int> 1940, 1946, 1947, 1945, 1939, 1948, 1946, 1944, 1940, 1~
## $ diretor        <chr> "Norman Ferguson", "King Vidor", "Richard Wallace", "Wa~
## $ duracao        <int> 88, 144, 95, 100, 226, 102, 118, 101, 120, 103, 95, 83,~
## $ cor            <chr> "Color", "Color", "Color", "Color", "Color", "Color", "~
## $ generos        <chr> "Animation|Family|Fantasy|Musical", "Drama|Romance|West~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "Outros", "Outros", "Outros", "Outros", "Outros", "Outr~
## $ orcamento      <int> 2600000, 8000000, 3209000, NA, 3977000, 3700000, 318000~
## $ receita        <int> 84300000, 20400000, NA, NA, 198655278, 2956000, NA, NA,~
## $ nota_imdb      <dbl> 7.5, 6.9, 6.2, 7.1, 8.2, 7.1, 8.6, 6.5, 7.8, 7.4, 7.6, ~
## $ likes_facebook <int> 0, 403, 44, 501, 16000, 359, 41000, 144, 3000, 721, 0, ~
## $ ator_1         <chr> "Mel Blanc", "Joseph Cotten", "Judith Anderson", "Dana ~
## $ ator_2         <chr> "Dickie Jones", "Lillian Gish", "Paul Fix", "Jeanne Cra~
## $ ator_3         <chr> "Cliff Edwards", "Jennifer Jones", "Laraine Day", "Fran~

filmes dirigidos por Stanley Kubrick ou por Quentin Tarantino:

head(
  imdb %>%
    filter(diretor %in% c("Stanley Kubrick", "Quentin Tarantino"))
  )
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3
Django Unchained 2012 Quentin Tarantino 165 Color Drama|Western USA A partir de 18 anos 1.0e+08 162804648 8.5 199000 Leonardo DiCaprio Christoph Waltz Ato Essandoh
Inglourious Basterds 2009 Quentin Tarantino 153 Color Adventure|Drama|War USA A partir de 18 anos 7.5e+07 120523073 8.3 42000 Michael Fassbender Brad Pitt Christoph Waltz
The Hateful Eight 2015 Quentin Tarantino 187 Color Crime|Drama|Mystery|Thriller|Western USA A partir de 18 anos 4.4e+07 54116191 7.9 114000 Craig Stark Jennifer Jason Leigh Zoë Bell
Kill Bill: Vol. 1 2003 Quentin Tarantino 111 Black and White Action USA A partir de 18 anos 3.0e+07 70098138 8.1 13000 David Carradine Vivica A. Fox Chiaki Kuriyama
Kill Bill: Vol. 2 2004 Quentin Tarantino 137 Black and White Action|Crime|Drama|Thriller USA A partir de 18 anos 3.0e+07 66207920 8.0 0 Vivica A. Fox Michael Parks Michael Bowen
The Shining 1980 Stanley Kubrick 146 Color Drama|Horror USA A partir de 18 anos 1.9e+07 NA 8.4 37000 Scatman Crothers Shelley Duvall Joe Turkel

filmes do diretor Guillermo del Toro ou Francis Ford Coppola ordenados de forma decrescente por ano, mostrando apenas as colunas titulo, ano e diretor.

head( imdb %>%
  filter(diretor %in% c("Guillermo del Toro","Francis Ford Coppola")) %>% 
  select(titulo,ano,diretor) %>% 
  arrange(desc(ano))
  )
titulo ano diretor
Pacific Rim 2013 Guillermo del Toro
Twixt 2011 Francis Ford Coppola
Hellboy II: The Golden Army 2008 Guillermo del Toro
Hellboy 2004 Guillermo del Toro
Blade II 2002 Guillermo del Toro
The Rainmaker 1997 Francis Ford Coppola

filmes que tenham “Sci-Fi” ou “Musical” entre os seus gêneros, neste caso usaremos uma função do pacote stringr que procura padrões nas strings.

#install.packages("stringr")
library(stringr)

head( imdb %>%
  filter(str_detect(string = generos, pattern = "Animation")
         | str_detect(string = generos, pattern = "Musical"))
  )
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3
Tangled 2010 Nathan Greno 100 Color Adventure|Animation|Comedy|Family|Fantasy|Musical|Romance USA Livre 2.60e+08 200807262 7.8 29000 Brad Garrett Donna Murphy M.C. Gainey
Monsters University 2013 Dan Scanlon 104 Color Adventure|Animation|Comedy|Family|Fantasy USA Outros 2.00e+08 268488329 7.3 44000 Steve Buscemi Tyler Labine Sean Hayes
Cars 2 2011 John Lasseter 106 Color Adventure|Animation|Comedy|Family|Sport USA Outros 2.00e+08 191450875 6.3 10000 Joe Mantegna Thomas Kretschmann Eddie Izzard
Toy Story 3 2010 Lee Unkrich 103 Color Adventure|Animation|Comedy|Family|Fantasy USA Outros 2.00e+08 414984497 8.3 30000 Tom Hanks John Ratzenberger Don Rickles
The Good Dinosaur 2015 Peter Sohn 93 Color Adventure|Animation|Comedy|Family|Fantasy USA Livre NA 123070338 6.8 20000 A.J. Buckley Jack McGraw Peter Sohn
Brave 2012 Mark Andrews 93 Color Adventure|Animation|Comedy|Family|Fantasy USA Livre 1.85e+08 237282182 7.2 39000 Kelly Macdonald John Ratzenberger Julie Walters

filmes que tenham “Musical” e “Sci-Fi” entre os seus gêneros e tenha nota_imdb maior que 5 :

imdb %>%
  filter(str_detect(string = generos, pattern = "Musical"),
  str_detect(string = generos, pattern = "Sci-Fi"),
  nota_imdb > 5)
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3
Little Shop of Horrors 1986 Frank Oz 102 Color Comedy|Horror|Musical|Sci-Fi USA A partir de 13 anos 2.5e+07 38747385 6.9 0 Bill Murray Jim Belushi Tisha Campbell-Martin
Repo! The Genetic Opera 2008 Darren Lynn Bousman 150 Color Horror|Musical|Sci-Fi USA A partir de 18 anos 8.5e+06 140244 6.7 8000 Alexa PenaVega Paris Hilton Paul Sorvino
The Ghastly Love of Johnny X 2012 Paul Bunnell 106 Black and White Comedy|Fantasy|Musical|Sci-Fi USA Outros 2.0e+06 2436 5.7 655 Kate Maberly Kevin McCarthy Paul Williams

filmes que não possuem informação tanto de receita quanto de orçamento, isto é, possuem NA (not a number) nas colunas.

Podemos utilizar o auxiliar is.na()

head( imdb %>% filter(is.na(orcamento),is.na(receita)) )
titulo ano diretor duracao cor generos pais classificacao orcamento receita nota_imdb likes_facebook ator_1 ator_2 ator_3
The A-Team NA NA 60 Color Action|Adventure|Crime USA Outros NA NA 7.6 0 George Peppard Dirk Benedict Dwight Schultz
Ben-Hur 2016 Timur Bekmambetov 141 Color Adventure|Drama|History USA A partir de 13 anos NA NA 6.1 0 Morgan Freeman Ayelet Zurer Moises Arias
Hannibal NA NA 44 Color Crime|Drama|Horror|Mystery|Thriller USA Outros NA NA 8.6 59000 Caroline Dhavernas Scott Thompson Hettienne Park
All That Jazz 1979 Bob Fosse 123 Color Comedy|Drama|Music|Musical USA A partir de 18 anos NA NA 7.8 0 Roy Scheider Ben Vereen Max Wright
Daredevil NA NA 54 NA Action|Adventure|Crime|Drama|Sci-Fi|Thriller USA Outros NA NA 8.8 55000 Elden Henson Royce Johnson Charlie Cox
Bewitched NA NA 25 Black and White Comedy|Family|Fantasy USA Outros NA NA 7.6 0 Elizabeth Montgomery Agnes Moorehead Dick York

Modificando e criando novas colunas

  1. Crie uma coluna chamada prejuizo (orcamento - receita) e salve a nova tabela em um objeto chamado imdb_prejuizo. Em seguida, filtre apenas os filmes que deram prejuízo e ordene a tabela por ordem decrescente de prejuízo.
imdb_prejuizo = mutate(imdb, prejuizo = orcamento - receita)

glimpse(
  imdb_prejuizo %>% 
    filter(prejuizo > 0) %>% 
    arrange(desc(prejuizo))
  )
## Rows: 1,312
## Columns: 16
## $ titulo         <chr> "John Carter ", "The Polar Express ", "Battleship ", "4~
## $ ano            <int> 2012, 2004, 2012, 2013, 2013, 2015, 2011, 2013, 2015, 2~
## $ diretor        <chr> "Andrew Stanton", "Robert Zemeckis", "Peter Berg", "Car~
## $ duracao        <int> 132, 100, 131, 128, 114, 127, 88, 150, 111, 111, 111, 1~
## $ cor            <chr> "Color", "Color", "Color", "Color", "Color", "Color", "~
## $ generos        <chr> "Action|Adventure|Sci-Fi", "Adventure|Animation|Family|~
## $ pais           <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "USA",~
## $ classificacao  <chr> "A partir de 13 anos", "Outros", "A partir de 13 anos",~
## $ orcamento      <int> 263700000, 165000000, 209000000, 175000000, 195000000, ~
## $ receita        <int> 73058679, 665426, 65173160, 38297305, 65171860, 4737532~
## $ nota_imdb      <dbl> 6.6, 6.6, 5.9, 6.3, 6.3, 5.4, 5.4, 6.5, 5.8, 5.8, 5.8, ~
## $ likes_facebook <int> 24000, 10000, 44000, 35000, 22000, 44000, 0, 48000, 240~
## $ ator_1         <chr> "Daryl Sabara", "Tom Hanks", "Liam Neeson", "Keanu Reev~
## $ ator_2         <chr> "Samantha Morton", "Eddie Deezen", "Alexander Skarsgård~
## $ ator_3         <chr> "Polly Walker", "Peter Scolari", "Tadanobu Asano", "Jin~
## $ prejuizo       <int> 190641321, 164334574, 143826840, 136702695, 129828140, ~
  1. Fazendo apenas uma chamada da função mutate(), crie as seguintes colunas novas na base imdb:
  1. lucro = receita - orcamento
imdb = mutate(imdb, lucro = receita - orcamento)
  1. lucro_medio
imdb = mutate(imdb, lucro_medio = mean(imdb $ lucro) )
  1. lucro_relativo = (lucro - lucro_medio)/lucro_medio
imdb = mutate(imdb, lucro_relativo = (lucro - lucro_medio)/lucro_medio)
  1. houve_lucro = ifelse(lucro > 0, “sim”, “não”)
imdb = mutate(imdb, houve_lucro = ifelse(lucro > 0, "sim", "não"))
  1. Crie uma nova coluna que classifique o filme em “recente” (posterior a 2000) e “antigo” (de 2000 para trás).
imdb  = mutate(imdb, antes_depois_2000 = ifelse(ano > 2000, "recente", "antigo"))
## Rows: 3,807
## Columns: 20
## $ titulo            <chr> "Avatar ", "Pirates of the Caribbean: At World's End~
## $ ano               <int> 2009, 2007, 2012, 2012, 2007, 2010, 2015, 2016, 2006~
## $ diretor           <chr> "James Cameron", "Gore Verbinski", "Christopher Nola~
## $ duracao           <int> 178, 169, 164, 132, 156, 100, 141, 183, 169, 151, 15~
## $ cor               <chr> "Color", "Color", "Color", "Color", "Color", "Color"~
## $ generos           <chr> "Action|Adventure|Fantasy|Sci-Fi", "Action|Adventure~
## $ pais              <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "US~
## $ classificacao     <chr> "A partir de 13 anos", "A partir de 13 anos", "A par~
## $ orcamento         <int> 237000000, 300000000, 250000000, 263700000, 25800000~
## $ receita           <int> 760505847, 309404152, 448130642, 73058679, 336530303~
## $ nota_imdb         <dbl> 7.9, 7.1, 8.5, 6.6, 6.2, 7.8, 7.5, 6.9, 6.1, 7.3, 6.~
## $ likes_facebook    <int> 33000, 0, 164000, 24000, 0, 29000, 118000, 197000, 0~
## $ ator_1            <chr> "CCH Pounder", "Johnny Depp", "Tom Hardy", "Daryl Sa~
## $ ator_2            <chr> "Joel David Moore", "Orlando Bloom", "Christian Bale~
## $ ator_3            <chr> "Wes Studi", "Jack Davenport", "Joseph Gordon-Levitt~
## $ lucro             <int> 523505847, 9404152, 198130642, -190641321, 78530303,~
## $ lucro_medio       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ lucro_relativo    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ houve_lucro       <chr> "sim", "sim", "sim", "não", "sim", "não", "sim", "si~
## $ antes_depois_2000 <chr> "recente", "recente", "recente", "recente", "recente~

Summarisando a base

  1. Calcule a duração média e mediana dos filmes da base.
imdb %>% summarise(
  media_duracao = mean(duracao, na.rm = TRUE),
  mediana_duracao = median(duracao, na.rm = TRUE)
)
media_duracao mediana_duracao
106.4351 103
  1. Calcule o lucro médio dos filmes com duração menor que 60 minutos.
imdb %>% 
  filter(duracao < 60) %>% 
  summarise( lucro_medio = mean(lucro, na.rm = TRUE))
lucro_medio
632454.3
  1. Apresente na mesma tabela o lucro médio dos filmes com duracao menor que 60 minutos e o lucro médio dos filmes com duracao maior ou igual a 60 minutos.
imdb <- imdb %>%
  mutate(duracao_60 = ifelse(duracao<60,"> 60 min","<= 60 min"))

imdb %>% 
  group_by(duracao_60) %>% 
  summarise( lucro_medio = mean(lucro, na.rm = TRUE))
duracao_60 lucro_medio
<= 60 min 17274471.8
> 60 min 632454.3
NA NaN
imdb <- select(imdb, -duracao_60)
  1. Retorne tabelas (tibbles) apenas com:
  1. a nota IMDB média dos filmes por tipo de classificacao;
imdb %>% 
  group_by(classificacao) %>% 
  summarise( nota_media = mean(nota_imdb,  na.rm = TRUE) )
classificacao nota_media
A partir de 13 anos 6.180133
A partir de 18 anos 6.466688
Livre 6.260932
Outros 6.645376
  1. a receita média e mediana dos filmes por ano;
head(imdb %>% 
  group_by(ano) %>% 
  summarise( receita_media = mean(receita,  na.rm = TRUE),
             receita_mediana = median(receita,  na.rm = TRUE))
  )
ano receita_media receita_mediana
1916 NaN NA
1920 3000000 3000000
1925 NaN NA
1929 2808000 2808000
1930 NaN NA
1932 NaN NA
  1. apenas o nome dos diretores com mais de 10 filmes.
head(imdb %>%
  group_by(diretor) %>% 
  summarise(n_filmes = n()) %>% 
  filter(n_filmes > 10)
  )
diretor n_filmes
Barry Levinson 13
Clint Eastwood 20
Francis Ford Coppola 11
John Carpenter 12
Kevin Smith 12
Martin Scorsese 20

Juntando duas bases

  1. Salve em um novo objeto uma tabela com a nota média dos filmes de cada diretor. Essa tabela deve conter duas colunas (diretor e nota_imdb_media) e cada linha deve ser um diretor diferente.
tab_nota_media <- imdb %>% 
  group_by(diretor) %>% 
  summarise( nota_imdb_media = mean(nota_imdb) )

head(tab_nota_media)
diretor nota_imdb_media
A. Raven Cruz 1.9
Aaron Hann 6.0
Aaron Schneider 7.1
Aaron Seltzer 2.7
Abel Ferrara 6.6
Adam Carolla 6.1
  1. Use o left_join() para trazer a coluna nota_imdb_media da tabela do item anterior para a tabela imdb original.
imdb <- left_join(imdb, tab_nota_media, by = "diretor")

glimpse(imdb)
## Rows: 3,807
## Columns: 21
## $ titulo            <chr> "Avatar ", "Pirates of the Caribbean: At World's End~
## $ ano               <int> 2009, 2007, 2012, 2012, 2007, 2010, 2015, 2016, 2006~
## $ diretor           <chr> "James Cameron", "Gore Verbinski", "Christopher Nola~
## $ duracao           <int> 178, 169, 164, 132, 156, 100, 141, 183, 169, 151, 15~
## $ cor               <chr> "Color", "Color", "Color", "Color", "Color", "Color"~
## $ generos           <chr> "Action|Adventure|Fantasy|Sci-Fi", "Action|Adventure~
## $ pais              <chr> "USA", "USA", "USA", "USA", "USA", "USA", "USA", "US~
## $ classificacao     <chr> "A partir de 13 anos", "A partir de 13 anos", "A par~
## $ orcamento         <int> 237000000, 300000000, 250000000, 263700000, 25800000~
## $ receita           <int> 760505847, 309404152, 448130642, 73058679, 336530303~
## $ nota_imdb         <dbl> 7.9, 7.1, 8.5, 6.6, 6.2, 7.8, 7.5, 6.9, 6.1, 7.3, 6.~
## $ likes_facebook    <int> 33000, 0, 164000, 24000, 0, 29000, 118000, 197000, 0~
## $ ator_1            <chr> "CCH Pounder", "Johnny Depp", "Tom Hardy", "Daryl Sa~
## $ ator_2            <chr> "Joel David Moore", "Orlando Bloom", "Christian Bale~
## $ ator_3            <chr> "Wes Studi", "Jack Davenport", "Joseph Gordon-Levitt~
## $ lucro             <int> 523505847, 9404152, 198130642, -190641321, 78530303,~
## $ lucro_medio       <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ lucro_relativo    <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ houve_lucro       <chr> "sim", "sim", "sim", "não", "sim", "não", "sim", "si~
## $ antes_depois_2000 <chr> "recente", "recente", "recente", "recente", "recente~
## $ nota_imdb_media   <dbl> 7.883333, 6.985714, 8.425000, 7.733333, 6.900000, 7.~