# 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")

Filtrando vetores

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()
})

Filtrando linhas em dataframes

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 NAs 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()
})

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()
})

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()
})

filter(____, !is.na(___), ____ == 5)
filter(airquality, !is.na(Solar.R), Month == 5)
grade_this({
  if (identical(.result, .solution)) {
    pass("Correto!")
  }
  fail()
})

Selecionando colunas em um dataframe

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()
})

Filtrando linhas e selecionando colunas

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()
})

Pipe

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()

Enviar as respostas

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)


curso-r/CursoRTarefas documentation built on Feb. 13, 2022, 3:21 p.m.