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
- 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, ~
- Fazendo apenas uma chamada da função mutate(), crie as seguintes colunas novas na base imdb:
- lucro = receita - orcamento
imdb = mutate(imdb, lucro = receita - orcamento)- lucro_medio
imdb = mutate(imdb, lucro_medio = mean(imdb $ lucro) )- lucro_relativo = (lucro - lucro_medio)/lucro_medio
imdb = mutate(imdb, lucro_relativo = (lucro - lucro_medio)/lucro_medio)- houve_lucro = ifelse(lucro > 0, “sim”, “não”)
imdb = mutate(imdb, houve_lucro = ifelse(lucro > 0, "sim", "não"))- 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
- 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 |
- 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 |
- 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)- Retorne tabelas (tibbles) apenas com:
- 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 |
- 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 |
- 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
- 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 |
- 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.~