# a) 11^(-4) - 1/3
a <- 11^(-4) - 1/3
# b) sin(pi/4) + cos(pi/5)
b <- sin(pi/4) + cos(pi/5)
# d) e^(-2) + tan(pi/3) + sqrt(10.5)
d <- exp(-2) + tan(pi/3) + sqrt(10.5)
# Résultats arrondis à 4 décimales
resultats <- round(c(a = a, b = b, d = d), 4)
resultats
## a b d
## -0.3333 1.5161 5.1078
x <- c(2, 5, 0, 1, 5, 1, 4)
# a) Valeurs max et min
max_x <- max(x)
min_x <- min(x)
# b) Somme des chiffres
soma_x <- sum(x)
# c) Moyenne
moyenne_x <- mean(x)
# d) Médiane
mediane_x <- median(x)
# e) Amplitude (max - min)
amplitude_x <- max_x - min_x
# f) Variance
variance_x <- var(x)
# g) Produit des éléments
produit_x <- prod(x)
# h) (de nouveau) somme
somme_x <- sum(x)
# j) Somme cumulative
somme_cum <- cumsum(x)
# k) Produit cumulatif
produit_cum <- cumprod(x)
# l) Tri croissant
tri_x <- sort(x)
# Regrouper les résultats simples dans un data frame
resultats_x <- data.frame(
max = max_x,
min = min_x,
somme = somme_x,
moyenne = moyenne_x,
mediane = mediane_x,
amplitude = amplitude_x,
variance = variance_x,
produit = produit_x
)
resultats_x
## max min somme moyenne mediane amplitude variance produit
## 1 5 0 18 2.571429 2 5 4.285714 0
# a) 1, 2, 3, 4, 5, 6, 7, 8, 9
seq_a <- 1:9
# b) 0.00, -6.25, ..., -50.00 (passo -6.25)
seq_b <- seq(from = 0, to = -50, by = -6.25)
# c) 100.0, 90.1, ..., 10.9 (passo -9.9)
seq_c <- round(seq(from = 100.0, to = 10.9, by = -9.9), 1)
# d) 1,2,3,4,5 repetidos 4 vezes
seq_d <- rep(1:5, times = 4)
list(a = seq_a, b = seq_b, c = seq_c, d = seq_d)
## $a
## [1] 1 2 3 4 5 6 7 8 9
##
## $b
## [1] 0.00 -6.25 -12.50 -18.75 -25.00 -31.25 -37.50 -43.75 -50.00
##
## $c
## [1] 100.0 90.1 80.2 70.3 60.4 50.5 40.6 30.7 20.8 10.9
##
## $d
## [1] 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
# a) valores > 4
maiores_que_4 <- x[x > 4]
# b) substituir 2 por NA
x_na <- x
x_na[x_na == 2] <- NA
# c) contar NAs e removê-los
qtd_na <- sum(is.na(x_na))
x_sem_na <- x_na[!is.na(x_na)]
list(maiores_que_4 = maiores_que_4, qtd_na = qtd_na, x_sem_na = x_sem_na)
## $maiores_que_4
## [1] 5 5
##
## $qtd_na
## [1] 1
##
## $x_sem_na
## [1] 5 0 1 5 1 4
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# a) 6 primeiras linhas
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# b) coluna peso_kg
mt <- mtcars %>%
mutate(peso_kg = wt * 453.592 / 1000)
# c) filtro mpg > 20 e cyl != 4, selecionar mpg, hp, peso_kg
mt_filtrado <- mt %>%
filter(mpg > 20, cyl != 4) %>%
select(mpg, hp, peso_kg)
list(peso_kg_exemplo = mt %>% select(wt, peso_kg) %>% head(),
filtrado = mt_filtrado)
## $peso_kg_exemplo
## wt peso_kg
## Mazda RX4 2.620 1.188411
## Mazda RX4 Wag 2.875 1.304077
## Datsun 710 2.320 1.052333
## Hornet 4 Drive 3.215 1.458298
## Hornet Sportabout 3.440 1.560356
## Valiant 3.460 1.569428
##
## $filtrado
## mpg hp peso_kg
## Mazda RX4 21.0 110 1.188411
## Mazda RX4 Wag 21.0 110 1.304077
## Hornet 4 Drive 21.4 110 1.458298
data(iris)
# a) média de Sepal.Length por espécie
media_por_especie <- aggregate(Sepal.Length ~ Species, iris, mean)
# b) desvio-padrão e contagem por espécie
dp_por_especie <- aggregate(Sepal.Length ~ Species, iris, sd)
names(dp_por_especie)[2] <- "sd_Sepal.Length"
n_por_especie <- aggregate(Sepal.Length ~ Species, iris, length)
names(n_por_especie)[2] <- "n"
# (alternativa dplyr)
library(dplyr)
resumo_dplyr <- iris %>%
group_by(Species) %>%
summarise(
media = mean(Sepal.Length),
sd = sd(Sepal.Length),
n = n(),
.groups = "drop"
)
# c) ordenar Sepal.Length do maior para o menor
iris_ordenado <- iris %>% arrange(desc(Sepal.Length))
list(base_media = media_por_especie,
base_sd = dp_por_especie,
base_n = n_por_especie,
dplyr = resumo_dplyr,
ordenado = head(iris_ordenado, 6))
## $base_media
## Species Sepal.Length
## 1 setosa 5.006
## 2 versicolor 5.936
## 3 virginica 6.588
##
## $base_sd
## Species sd_Sepal.Length
## 1 setosa 0.3524897
## 2 versicolor 0.5161711
## 3 virginica 0.6358796
##
## $base_n
## Species n
## 1 setosa 50
## 2 versicolor 50
## 3 virginica 50
##
## $dplyr
## # A tibble: 3 × 4
## Species media sd n
## <fct> <dbl> <dbl> <int>
## 1 setosa 5.01 0.352 50
## 2 versicolor 5.94 0.516 50
## 3 virginica 6.59 0.636 50
##
## $ordenado
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 7.9 3.8 6.4 2.0 virginica
## 2 7.7 3.8 6.7 2.2 virginica
## 3 7.7 2.6 6.9 2.3 virginica
## 4 7.7 2.8 6.7 2.0 virginica
## 5 7.7 3.0 6.1 2.3 virginica
## 6 7.6 3.0 6.6 2.1 virginica
data(airquality)
# a) contar NAs por coluna
nas_por_coluna <- sapply(airquality, function(v) sum(is.na(v)))
# b) remover linhas com NA (ou imputar média)
aq_sem_na <- na.omit(airquality)
# Imputação simples por média (exemplo)
aq_imputado <- airquality
for (nm in names(aq_imputado)) {
if (is.numeric(aq_imputado[[nm]])) {
m <- mean(aq_imputado[[nm]], na.rm = TRUE)
aq_imputado[[nm]][is.na(aq_imputado[[nm]])] <- m
}
}
# c) Temp_C e estatísticas
aq_imputado <- transform(aq_imputado, Temp_C = (Temp - 32) * 5/9)
stats_tempC <- summary(aq_imputado$Temp_C)
list(nas = nas_por_coluna, exemplo_linhas = head(aq_imputado), stats_tempC = stats_tempC)
## $nas
## Ozone Solar.R Wind Temp Month Day
## 37 7 0 0 0 0
##
## $exemplo_linhas
## Ozone Solar.R Wind Temp Month Day Temp_C
## 1 41.00000 190.0000 7.4 67 5 1 19.44444
## 2 36.00000 118.0000 8.0 72 5 2 22.22222
## 3 12.00000 149.0000 12.6 74 5 3 23.33333
## 4 18.00000 313.0000 11.5 62 5 4 16.66667
## 5 42.12931 185.9315 14.3 56 5 5 13.33333
## 6 28.00000 185.9315 14.9 66 5 6 18.88889
##
## $stats_tempC
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 13.33 22.22 26.11 25.49 29.44 36.11
library(ggplot2)
# a) scatter Sepal.Length vs Sepal.Width, cor por Species
p1 <- ggplot(iris, aes(Sepal.Length, Sepal.Width, color = Species)) +
geom_point()
# b) adicionar linha de tendência linear
p2 <- p1 + geom_smooth(method = "lm", se = FALSE)
# c) facets por Species + rótulos e tema
p3 <- p2 +
facet_wrap(~ Species) +
labs(title = "Relação entre Sepal.Length e Sepal.Width por espécie",
x = "Sepal Length", y = "Sepal Width") +
theme_minimal()
p1; p2; p3
9.
# a) zscore que ignora NA
zscore <- function(x) {
(x - mean(x, na.rm = TRUE)) / sd(x, na.rm = TRUE)
}
# b) aplicar à coluna hp de mtcars
zs_hp <- zscore(mtcars$hp)
# c) classificar mpg em "baixo", "médio", "alto"
# usaremos quebras por tercis como exemplo
quebras <- quantile(mtcars$mpg, probs = c(0, 1/3, 2/3, 1))
classe_mpg <- cut(mtcars$mpg,
breaks = quebras,
include.lowest = TRUE,
labels = c("baixo","médio","alto"))
table(classe_mpg)
## classe_mpg
## baixo médio alto
## 11 11 10
num_cols <- sapply(mtcars, is.numeric)
mt_num <- mtcars[, num_cols]
# a) sapply: min, max, mean por coluna numérica
mins <- sapply(mt_num, min)
maxs <- sapply(mt_num, max)
means <- sapply(mt_num, mean)
res_apply <- rbind(min = mins, max = maxs, mean = means)
# b) tapply: média de mpg por cyl
media_mpg_cyl <- with(mtcars, tapply(mpg, cyl, mean))
# c) by: summary de hp por cyl
summary_hp_cyl <- by(mtcars$hp, mtcars$cyl, summary)
list(resumo_colunas = res_apply,
media_mpg_por_cyl = media_mpg_cyl,
summary_hp_por_cyl = summary_hp_cyl)
## $resumo_colunas
## mpg cyl disp hp drat wt qsec vs am
## min 10.40000 4.0000 71.1000 52.0000 2.760000 1.51300 14.50000 0.0000 0.00000
## max 33.90000 8.0000 472.0000 335.0000 4.930000 5.42400 22.90000 1.0000 1.00000
## mean 20.09062 6.1875 230.7219 146.6875 3.596563 3.21725 17.84875 0.4375 0.40625
## gear carb
## min 3.0000 1.0000
## max 5.0000 8.0000
## mean 3.6875 2.8125
##
## $media_mpg_por_cyl
## 4 6 8
## 26.66364 19.74286 15.10000
##
## $summary_hp_por_cyl
## mtcars$cyl: 4
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 52.00 65.50 91.00 82.64 96.00 113.00
## ------------------------------------------------------------
## mtcars$cyl: 6
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 105.0 110.0 110.0 122.3 123.0 175.0
## ------------------------------------------------------------
## mtcars$cyl: 8
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 150.0 176.2 192.5 209.2 241.2 335.0
# a) modelo
mod <- lm(mpg ~ wt + hp, data = mtcars)
# b) coeficientes e R^2
sum_mod <- summary(mod)
coeficientes <- coef(sum_mod)
r2 <- sum_mod$r.squared
r2_aj <- sum_mod$adj.r.squared
# c) previsões para 3 carros novos e resíduos
novos <- data.frame(
wt = c(2.2, 2.8, 3.5),
hp = c(90, 110, 160)
)
prev <- predict(mod, newdata = novos)
# gráfico dos resíduos
plot(mod, which = 1) # Resíduos vs Ajustados
list(coeficientes = coeficientes, r2 = r2, r2_ajustado = r2_aj, previsoes = prev)
## $coeficientes
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 37.22727012 1.59878754 23.284689 2.565459e-20
## wt -3.87783074 0.63273349 -6.128695 1.119647e-06
## hp -0.03177295 0.00902971 -3.518712 1.451229e-03
##
## $r2
## [1] 0.8267855
##
## $r2_ajustado
## [1] 0.8148396
##
## $previsoes
## 1 2 3
## 25.83648 22.87432 18.57119
library(readr)
library(dplyr)
# a) exportar mtcars com mpg > 25
mt_gt25 <- mtcars %>% filter(mpg > 25)
write_csv(mt_gt25, "mtcars_mpg_gt25.csv")
# b) ler de volta e confirmar dimensões/estrutura
mt_lido <- read_csv("mtcars_mpg_gt25.csv", show_col_types = FALSE)
dim_lido <- dim(mt_lido)
str_lido <- capture.output(str(mt_lido))
# c) pipeline solicitado
pipe_res <- mtcars %>%
filter(cyl != 3) %>%
group_by(cyl) %>%
summarise(across(c(mpg, hp), mean), .groups = "drop") %>%
arrange(desc(mpg))
list(dim_lido = dim_lido, pipe = pipe_res)
## $dim_lido
## [1] 6 11
##
## $pipe
## # A tibble: 3 × 3
## cyl mpg hp
## <dbl> <dbl> <dbl>
## 1 4 26.7 82.6
## 2 6 19.7 122.
## 3 8 15.1 209.