library(learnr)
knitr::opts_chunk$set(echo = TRUE)
tutorial_options(exercise.cap = "Código", exercise.timelimit = 300)
# vetores usados nos exercícios
frutas <- c("maçã", "banana", "melancia")
dolar_subiu <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE)
numeross <- -4:2

Exercícios

Boas vindas!

Este material faz parte do curso R para Ciência de Dados I, da Curso-R.

Caso tenha dúvidas, pedimos que escreva no Discourse.

Objetos

A) Crie um vetor com o nome de três frutas (maçã, banana, melancia) e guarde em um objeto chamado frutas.


frutas __ _(___, ___, ___)
frutas <- c(___, ___, ___)
frutas <- c("maçã", "banana", "melancia")
frutas <- c("maçã", "banana", "melancia")

b) Use a função length() para contar o tamanho do vetor. Certifique-se que retorna 3.


length(_____)
length(frutas)

c) Use [] para retornar a primeira fruta do vetor.


frutas[__]
frutas[1]

d) Observe a saída de paste("eu gosto de", frutas) e verifique se o tamanho do vetor mudou.


paste("eu gosto de", frutas)
# O tamanho do vetor continua o mesmo: 3.
# O R aplicou a função `paste()` para cada elemento do vetor frutas. 

Dataframes

A base de dados airquality apresenta dados de qualidade do ar obtidos diariamente, em Nova York, entre os meses de maio e setembro de 1973:

airquality

Use o data.frame airquality para responder às questões abaixo:

a) Quantas colunas airquality tem?


___(airquality)
ncol(airquality)

b) Quantas linhas airquality tem?


___(airquality)
nrow(airquality)

c) O que a função head() retorna?


___(airquality)
head(airquality)
# A função head() retorna as 6 primeiras linhas da base.

d) Quais são os nomes das colunas?


___(airquality)
colnames(airquality)

e) Qual é a classe da coluna Ozone? Dicas: class() e $


class(airquality______)
class(airquality$Ozone)

f) O que o código dplyr::glimpse(airquality) retorna?


dplyr::glimpse(airquality)

# A função glimpse() do pacote dpyr retorna várias informações interessantes:
# O número de linhas
# O número de colunas
# O nome das colunas
# O tipo de cada coluna
# Algumas observações da coluna, para ter uma ideia dos dados disponíveis.

g) Utilizando a resposta da questão anterior, quais são os tipos de cada coluna da tabela airquality?

Vetores e funções

a) Analise as duas linhas de códigos abaixo. Os resultados são iguais? Porquê?

c(1,2,3) - 1           # código 1
c(1,2,3) - c(1,1,1)    # código 2
c(1,2,3) - 1           # código 1
c(1,2,3) - c(1,1,1)    # código 2

# Os resultados são iguais.
# No caso do código 1, como foi solicitado subtrair usando vetores de tamanhos diferentes, o R reciclou o segundo elemento.
# No caso do código 2, a subtração foi feita baseado na posição dos vetores. Exemplo: 1-1, 2-1, 3-1.

b) Considere o vetor booleano abaixo:

dolar_subiu <- c(TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE)

Este vetor tem informação de uma semana (7 dias) indicando se o dolar subiu (TRUE) (ou não subiu - FALSE) no respectivo dia.

Interprete os resultados dos códigos abaixo:

I) length(dolar_subiu)


length(dolar_subiu)

# A função length retorna o tamanho do vetor. 
# O vetor 'dolar_subiu' possui 7 elementos.

II) dolar_subiu[2] (ps: a semana começa no domingo)


dolar_subiu[2]

# O segundo elemento selecionado representa a segunda-feira.
# Na segunda-feira, o dolar subiu (TRUE).

III) sum(dolar_subiu)


sum(dolar_subiu)

# A função sum() realiza a soma dos elementos do vetor.
# Como o vetor possui dados do tipo lógico (TRUE ou FALSE), o R entende que TRUE = 1 e FALSE = 0.
# O resultado de sum(dolar_subiu) é 4, portanto o dólar subiu em 4 dias na semana. 

IV) mean(dolar_subiu)


mean(dolar_subiu)

# A função sum() realiza a média dos elementos do vetor.
# O resultado representa a média de dias em que o dólar subiu.

c) Agora observe a saída de as.numeric(dolar_subiu). O que o R fez?


as.numeric(dolar_subiu)

# A função as.numeric() transforma um vetor em numérico (quando possível).
# No vetor que o R retornou, TRUE foi transformado em 1, e FALSE foi transformado em 0.

Desafio

Use o data.frame airquality para responder às questões abaixo. Vamos calcular o desvio padrão de Ozone sem usar a função sd().

airquality

a) tire a média da coluna Ozone. Dica: use mean(x, na.rm = TRUE). b) subtraia da colunaOzone a sua própria média (centralização). c) eleve o vetor ao quadrado. d) tire a média do vetor. e) tire a raíz quadrada. f) compare o resultado com sd(airquality$Ozone, na.rm = TRUE)

Dica: guarde os resultados de cada item em objetos para poderem ser usados depois!

# a)
media_ozone <-  ___ 
# b) 
ozone_centralizado <-  ___ 
# c) 
ozone_centralizado_ao_quadrado <-  ___  
# d) 
media_ozone_centralizado_ao_quadrado <-  ___ 
# e)
sd_ozone_calculado <-  ___ 
# f)
sd_ozone_funcao <- ___  

sd_ozone_calculado ___ sd_ozone_funcao
# a)
media_ozone <- mean(airquality$Ozone, na.rm = TRUE)
# b)
ozone_centralizado <-  airquality$Ozone - media_ozone
# c)
ozone_centralizado_ao_quadrado <-  ozone_centralizado ^ 2
# d)
media_ozone_centralizado_ao_quadrado <- mean(ozone_centralizado_ao_quadrado, na.rm = TRUE)
# e)
sd_ozone_calculado <- sqrt(media_ozone_centralizado_ao_quadrado)
sd_ozone_calculado
# f)
sd_ozone_funcao <- sd(airquality$Ozone, na.rm = TRUE)
sd_ozone_funcao 
# São iguais?
sd_ozone_calculado == sd_ozone_funcao

# Os resultados são diferentes!

Funções próprias

a) Crie uma função chamada numero_ao_quadrado() que receba um número e retorne o quadrado deste número.

Teste se a função funciona: numero_ao_quadrado(3) deve retornar o valor 9.


numero_ao_quadrado <- function(____){
  _____
}

numero_ao_quadrado(3)
numero_ao_quadrado <- function(numero){
  numero ^ 2
}

# Teste se a função funciona:
numero_ao_quadrado(3)

b) DESAFIO! Crie uma função que recebe 2 números x e y e retorna a raiz quadrada da soma desses números. Depois teste a função para valores x = 6 e y = 3, o resultado gerado pela função deve ser 3.

Dica: sqrt() é a função para raiz quadrada.


raiz_da_soma <- function(x, y){
  ______ <- x + y
  ______
}

# Teste se a função funciona:
raiz_da_soma(x = 6, y = 3)
raiz_da_soma <- function(x, y){
  soma <- x + y
  sqrt(soma)
}

# Teste se a função funciona:
raiz_da_soma(x = 6, y = 3)

Filtro e vetores lógicos

a) Use o vetor numeross abaixo para responder as questões seguintes:

numeross <- -4:2

numeross

I) Escreva um código que devolva apenas valores positivos do vetor numeross.


numeross[numeross ____]
numeross[numeross > 0]

II) Escreva um código que devolta apenas os valores pares do vetor numeross. Dica: o operador %% devolve o resto da divisão entre dois números.


numeross[numeross __ __ __ __]
numeross[numeross %% __ == __]
numeross[numeross %% 2 == 0]

III) Filtre o vetor para que retorne apenas aqueles valores que quando elevados a 2 são menores do que 4.


numeross[_______________]
numeross[(numeros ^ 2) _____]
numeross[(numeross ^ 2) < 4]

b) Use o data.frame airquality para responder às questões abaixo:

airquality

I) Conte quantos NAs tem na coluna Solar.R. Dica: use '$', is.na() e sum():


___(___(airquality$Solar.R))
sum(___(airquality$Solar.R))
sum(is.na(airquality$Solar.R))

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), ]

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), ]

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, ]


curso-r/CursoR documentation built on Feb. 15, 2021, 1:21 a.m.