# remotes::install_github("curso-r/CursoRTarefas") library(CursoRTarefas) CursoRTarefas::adicionar_chunk_setup()
CursoRTarefas::adicionar_codigo_pre_tutorial(curso = "Introdução à programação com R", url = "https://loja.curso-r.com/introduc-o-a-programac-o-com-r.html")
a) Use o vetor numeros
abaixo para responder as questões seguintes:
numeros <- -4:2 numeros
numeros <- -4:2 numeros
I) Escreva um código que devolva apenas valores positivos do vetor numeros
.
numeros[numeros ____]
numeros[numeros > 0]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
II) Escreva um código que devolta apenas os valores pares do vetor numeros
. Dica: o operador %%
devolve o resto da divisão entre dois números.
numeros[numeros __ __ __ __]
numeros[numeros %% __ == __]
numeros[numeros %% 2 == 0]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
III) Filtre o vetor para que retorne apenas aqueles valores que quando elevados a 2 são menores do que 4.
numeros[_______________]
numeros[(numeros ^ 2) _____]
numeros[(numeros ^ 2) < 4]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
Para os exercícios de filtros de linhas em dataframes, vamos solicitar que faça usando R base e também dplyr
.
Use o dataframe airquality
para responder às questões abaixo:
library(dplyr) # carregando o pacote dplyr airquality
knitr::opts_chunk$set(warning = FALSE, message = FALSE) library(dplyr) airquality
I) Conte quantos NA
s tem na coluna Solar.R
. Dica: use '$
', is.na()
e sum()
:
airquality
___(___(airquality$Solar.R))
sum(___(airquality$Solar.R))
sum(is.na(airquality$Solar.R))
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
II) Filtre a tabela airquality
com apenas linhas em que Solar.R
é NA
.
____[___(airquality$Solar.R) ___ ]
____[is.na(airquality$Solar.R) ___ ]
airquality[is.na(airquality$Solar.R), ]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
dplyr
:filter(_____, is.na(___))
filter(airquality, is.na(Solar.R))
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
III) Filtre a tabela airquality
com apenas linhas em que Solar.R
NÃO é NA
.
____[____(airquality$Solar.R) ___ ]
____[!is.na(airquality$Solar.R) ___ ]
airquality[!is.na(airquality$Solar.R), ]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
dplyr
:filter(___, !is.na(___))
filter(airquality, !is.na(Solar.R))
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
IV) Filtre a tabela airquality
com apenas linhas em que Solar.R
NÃO é NA
e Month
é igual a 5.
airquality[_________________ _________, ]
airquality[!is.na(airquality$Solar.R) & _________, ]
airquality[!is.na(airquality$Solar.R) & airquality$Month == 5, ]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
dplyr
:filter(____, !is.na(___), ____ == 5)
filter(airquality, !is.na(Solar.R), Month == 5)
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
Para os exercícios de filtros de linhas em dataframes, vamos solicitar que faça usando R base e também dplyr
.
Use o dataframe airquality
para responder às questões abaixo:
library(dplyr) # carregando o pacote dplyr airquality
I) Selecione a coluna Temp
, sem perder a estrutura de data.frame:
airquality["..."]
airquality["Temp"]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } if(.result == airquality[, c("Temp")] ){ fail('Desta forma, você está selecionando uma coluna da base e retornando um vetor. Tente novamente, sem perder a estrutura de data.frame. Tente a forma: nome_da_base["nome_da_coluna"]' ) } fail() })
select(....)
select(airquality, Temp)
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
II) Selecione as colunas: Temp
, Month
, Day
:
airquality[c(..., ..., ...)]
airquality[c("Temp", "Month", "Day")]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
select(..., ..., ...)
select(airquality, Temp, Month, Day)
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
Muitas vezes, queremos fazer as duas operações junto: filtrar linhas e selecionar colunas.
Para esses exercícios, vamos solicitar que faça usando R base e também dplyr
.
Use o dataframe airquality
para responder às questões abaixo:
library(dplyr) # carregando o pacote dplyr airquality
1) Usando R base, retorne apenas as linhas onde Solar.R não seja NA, e apenas as colunas: "Solar.R", "Month", "Day"
airquality[... ,...]
airquality[!is.na(airquality$Solar.R), c("Solar.R", "Month", "Day")]
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
2) Agora vamos fazer o mesmo com dplyr, porém em partes:
2) Usando dplyr, selecione as colunas "Solar.R", "Month", "Day", e salve em um objeto chamado airquality_selecao
. Usando a base airquality_selecao
, filtre as linhas que não sejam NA na coluna Solar.R :
airquality_selecao <- ... airquality_filtrado <- .... airquality_filtrado
airquality_selecao <- ...(airquality, ...) airquality_filtrado <- ...(airquality_selecao, ...) airquality_filtrado
airquality_selecao <- select(airquality, Solar.R, Month, Day) airquality_filtrado <- filter(airquality_selecao, !is.na(Solar.R)) airquality_filtrado
grade_this({ if (identical(.result, .solution)) { pass("Correto!") } fail() })
library(dplyr) # carregando o pacote dplyr para usar # as funções filter e select library(magrittr) # carregando o pacote que contém o pipe %>% airquality
1) O código a seguir foi apresentado em um exercício anterior, onde era necessário selecionar as colunas Solar.R, Month e Day, e filtrar as linhas que não apresentassem NA na coluna Solar.R.
Adapte esse código para usar o pipe (do pacote magrittr
), sem salvar nada em objetos:
airquality_selecao <- select(airquality, Solar.R, Month, Day) airquality_filtrado <- filter(airquality_selecao, !is.na(Solar.R)) airquality_filtrado
airquality %>% select(____) %>% filter(____)
airquality %>% select(Solar.R, Month, Day) %>% filter(!is.na(Solar.R))
gradethisBR::grade_this_code()
2) Se quisermos calcular a média da variável Ozone, para o mês de junho, e arredondar o resultado para duas casas decimais, podemos usar o seguinte código em R base:
round(mean(airquality[airquality$Month == 6,]$Ozone, na.rm = TRUE), 2)
É confuso entender o que acontece pois lemos de "dentro pra fora".
Com o pipe conseguimos escrever este mesmo código de uma forma mais legível.
Reescreva a lógica do código acima usando pipe (verifique também se o resultado é igual):
airquality %>% #_____(______) %>% pull(Ozone) %>% # a função pull(), do pacote dplyr, retorna a coluna # como um vetor #____(na.rm = TRUE) %>% #_____(_)
airquality %>% filter(______) %>% pull(Ozone) %>% mean(na.rm = TRUE) %>% round(_)
airquality %>% filter(Month == 6) %>% pull(Ozone) %>% mean(na.rm = TRUE) %>% round(2)
gradethisBR::grade_this_code()
Se você completou a tarefa e quer submeter, clique no botão abaixo ('Generate') para gerar o seu código hash e envie usando o formulário a seguir:
learnrhash::encoder_logic()
learnrhash::encoder_ui(ui_before = " ", ui_after = " ")
CursoRTarefas::adicionar_codigo_pos_tutorial(url_form = params$url_form)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.