# 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.