Soluções dos Exercícios

Soluções do Capítulo 1  Fundamentos de R

Solução. Solução do Exercício 1.1

# Criando um vetor com 10 retornos mensais
set.seed(123)
retornos <- runif(10, -0.05, 0.10)

# Verificando o tamanho do vetor
length(retornos)
[1] 10
# Acessando o 3º e 7º retornos
retornos[c(3,7)]
[1] 0.01134654 0.02921582
# Quais meses tiveram retorno positivo
which( retornos > 0 )
[1]  2  3  4  5  7  8  9 10
retornos[retornos > 0]
[1] 0.06824577 0.01134654 0.08245261 0.09107009 0.02921582 0.08386286 0.03271525
[8] 0.01849221
# Calculando o retorno médio
mean(retornos)
[1] 0.03673713

Solução. Solução do Exercício 1.2

# Criando o fator com classificações de risco
risco <- factor(c("Baixo", "Médio", "Alto", "Baixo", "Alto", "Médio", "Baixo", "Alto"))

# Verificando a classe
class(risco)
[1] "factor"
# Visualizando os níveis (categorias)
levels(risco)
[1] "Alto"  "Baixo" "Médio"
# Convertendo para números
as.numeric(risco)
[1] 2 3 1 2 1 3 2 1
# Contando quantas empresas estão em cada nível de risco
table(risco)
risco
 Alto Baixo Médio 
    3     3     2 
# ou
summary(risco)
 Alto Baixo Médio 
    3     3     2 

Observação: A função factor() cria categorias. levels() mostra as categorias únicas. table() ou summary() contam as frequências de cada categoria.

Solução. Solução do Exercício 1.3

# Criando a matriz com os dados de PIB trimestral
pib_matriz <- matrix(c(1500, 1550, 1600, 
                       800, 820, 850, 
                       700, 720, 740, 
                       500, 510, 520), 
                     nrow = 4, byrow = TRUE)

# Adicionando nomes às linhas e colunas
rownames(pib_matriz) <- c("SP", "MG", "RJ", "BA")
colnames(pib_matriz) <- c("Q1", "Q2", "Q3")

# Verificando as dimensões
dim(pib_matriz)
[1] 4 3
nrow(pib_matriz)
[1] 4
ncol(pib_matriz)
[1] 3
# Acessando o PIB de SP no Q2
pib_matriz["SP", "Q2"]
[1] 1550
# ou
pib_matriz[1, 2]
[1] 1550
# Acessando toda a coluna de Q3
pib_matriz[, "Q3"]
  SP   MG   RJ   BA 
1600  850  740  520 
# Calculando o PIB total por estado
rowSums(pib_matriz)
  SP   MG   RJ   BA 
4650 2470 2160 1530 

Solução. Solução do Exercício 1.4

# Criando a lista com informações da empresa
empresa_data <- list(
  nome = "Petrobras",
  setor = "Energia",
  cotacoes = c(25.5, 26.3, 25.8, 27.1, 26.9),
  anos_operacao = 60
)

# Acessando elementos com o operador $
empresa_data$nome
[1] "Petrobras"
empresa_data$setor
[1] "Energia"
empresa_data$cotacoes
[1] 25.5 26.3 25.8 27.1 26.9
empresa_data$anos_operacao
[1] 60
# Acessando com colchetes duplos [[]]
empresa_data[[1]]
[1] "Petrobras"
empresa_data[[3]]
[1] 25.5 26.3 25.8 27.1 26.9
# Acessando a segunda cotação
empresa_data[["cotacoes"]][2]
[1] 26.3
# Ou de forma alternativa
empresa_data$cotacoes[2]
[1] 26.3

Solução. Solução do Exercício 1.5

# Criando o dataframe com dados econômicos regionais
economia_regional <- data.frame(
  Regiao = c("Nordeste", "Norte", "Centro-Oeste", "Sudeste", "Sul"),
  PIB_bilhoes = c(450, 280, 380, 2100, 800),
  Taxa_Desemprego = c(12.5, 11.8, 10.2, 8.5, 9.3),
  Inflacao = c(5.2, 5.1, 4.9, 4.8, 5.0)
)

# Acessando a coluna PIB usando $
economia_regional$PIB_bilhoes
[1]  450  280  380 2100  800
# Filtrando regiões com desemprego > 10%
regioes_alto_desemprego <- economia_regional[economia_regional$Taxa_Desemprego > 10, ]
regioes_alto_desemprego
        Regiao PIB_bilhoes Taxa_Desemprego Inflacao
1     Nordeste         450            12.5      5.2
2        Norte         280            11.8      5.1
3 Centro-Oeste         380            10.2      4.9
# Calculando o PIB médio
mean(economia_regional$PIB_bilhoes)
[1] 802
# Acessando a segunda linha completamente
economia_regional[2, ]
  Regiao PIB_bilhoes Taxa_Desemprego Inflacao
2  Norte         280            11.8      5.1

Solução. Solução do Exercício 1.6

# Criando o dataframe com dados faltantes (NA)
ativos <- data.frame(
  mes = 1:6,
  ativo_a = c(100, 102, NA, 105, 107, 108),
  ativo_b = c(50, 51, 52, NA, 54, 55),
  ativo_c = c(200, NA, 202, 203, 204, 205)
)

# Identificando dados faltantes
is.na(ativos)
       mes ativo_a ativo_b ativo_c
[1,] FALSE   FALSE   FALSE   FALSE
[2,] FALSE   FALSE   FALSE    TRUE
[3,] FALSE    TRUE   FALSE   FALSE
[4,] FALSE   FALSE    TRUE   FALSE
[5,] FALSE   FALSE   FALSE   FALSE
[6,] FALSE   FALSE   FALSE   FALSE
# Contando NA por coluna
colSums(is.na(ativos))
    mes ativo_a ativo_b ativo_c 
      0       1       1       1 
# Removendo linhas com NA
ativos_completos <- na.omit(ativos)
ativos_completos
  mes ativo_a ativo_b ativo_c
1   1     100      50     200
5   5     107      54     204
6   6     108      55     205
# Verificando as dimensões antes e depois
nrow(ativos)      # 6 linhas originais
[1] 6
nrow(ativos_completos)  # 2 linhas após remover NA
[1] 3

Solução. Solução do Exercício 1.7

# 1. Criando um vetor com 12 inflações mensais
set.seed(42)
inflacao_mensal <- c(0.35, 0.42, 0.38, 0.45, 0.40, 0.38, 
                     0.43, 0.39, 0.41, 0.37, 0.44, 0.36) / 100

# 2. Criando um fator com as estações do ano (4 repetições)
estacoes <- factor(rep(c("Verão", "Outono", "Inverno", "Primavera"), 3))

# 3. Combinando em um dataframe
analise_inflacao <- data.frame(
  mes = 1:12,
  estacao = estacoes,
  inflacao = inflacao_mensal
)

# 4. Calculando a inflação média
inflacao_media <- mean(analise_inflacao$inflacao)
inflacao_media
[1] 0.003983333
# 5. Identificando meses com inflação maior que a média
meses_acima_media <- analise_inflacao[analise_inflacao$inflacao > inflacao_media, ]
meses_acima_media
   mes   estacao inflacao
2    2    Outono   0.0042
4    4 Primavera   0.0045
5    5     Verão   0.0040
7    7   Inverno   0.0043
9    9     Verão   0.0041
11  11   Inverno   0.0044
# Ou apenas os números dos meses
which(analise_inflacao$inflacao > inflacao_media)
[1]  2  4  5  7  9 11
# 6. (Desafio extra) Calculando a inflação média por estação
tapply(analise_inflacao$inflacao, analise_inflacao$estacao, mean)
    Inverno      Outono   Primavera       Verão 
0.004166667 0.003900000 0.004000000 0.003866667 
# Forma alternativa com aggregate
aggregate(inflacao ~ estacao, data = analise_inflacao, FUN = mean)
    estacao    inflacao
1   Inverno 0.004166667
2    Outono 0.003900000
3 Primavera 0.004000000
4     Verão 0.003866667

Este exercício integra todos os conceitos anteriores. tapply() aplica uma função a grupos. aggregate() é alternativa mais clara para operações por grupo. Este é um exemplo prático de análise de dados que mestrandos em economia encontrarão frequentemente.