4  Capítulo – Estruturas de Dados

4.1 Tipos de objetos no R

Os tipos mais comuns de tipos de objeto são: vetores (vector), data frames (tabelas), listas (list), matrizes (matrix), e array (conjunto de matrizes).

Figura 6. Tipo de Estrutura de Dados (Objetos)

4.2 Vetores

Vertor: é um arranjo linear de dados

#Criando o vetor
temperaturas <- c(25.2, 26.1, 27.0, 26.8)
#Visualizando
temperaturas
[1] 25.2 26.1 27.0 26.8
# Verificando a classe do objeto criado
class(temperaturas)
[1] "numeric"
# Acessando elementos específicos
temperaturas[2]
[1] 26.1
#Criando o vetor
sensacoes <- c("Frio", "Agradável", "Quente", "Muito Quente", "Extremo")
#Visualizando
sensacoes
[1] "Frio"         "Agradável"    "Quente"       "Muito Quente" "Extremo"     
# Verificando a classe do objeto criado
class(sensacoes)
[1] "character"
# Acessando elementos específicos
sensacoes[1]
[1] "Frio"
sensacoes[3]
[1] "Quente"
#Criando o vetor
v1 <- c("Frio", 23, "Quente", 32, "Muito Quente", 40)
#Visualizando
v1
[1] "Frio"         "23"           "Quente"       "32"           "Muito Quente"
[6] "40"          
# Verificando a classe do objeto criado
class(v1)
[1] "character"
# Acessando elementos específicos
v1[1]
[1] "Frio"
v1[3]
[1] "Quente"

4.3 Funções (básicas)

Funções base que já existem dentro do programa RCRAN.

Função O que faz
sum() Soma todos os valores
min() Retorna o menor valor
max() Retorna o maior valor
mean() Calcula a média dos valores
round() Arredonda um número para n casas decimais
length() Informa quantos valores há no vetor
sd() Calcula o desvio padrão de uma amostra
Você sabia?

Todas essas funções fazem parte do que chamamos de “base R”. Não precisam de pacotes extras para funcionar.

x <- 4
y <- 6
sum(x,y)
[1] 10
# Vetor com temperaturas diárias (em °C)
temperaturas <- c(27.2, 28.5, 29.0, 26.8, 30.1)

# Média das temperaturas
mean(temperaturas)
[1] 28.32
# Temperatura máxima
max(temperaturas)
[1] 30.1
# Temperatura mínima
min(temperaturas)
[1] 26.8
# Soma total
sum(temperaturas)
[1] 141.6
# Número de observações
length(temperaturas)
[1] 5
# Arredondar a média com 1 casa decimal
round(mean(temperaturas), 1)
[1] 28.3

4.4 ✍️ Prática

Agora faça você mesmo!

Crie um vetor chamado chuvas com os valores de precipitação (em mm) de 7 dias consecutivos.

Depois:

  • Calcule a soma total de chuvas

  • Encontre o maior valor de precipitação

  • Arredonde a média com 2 casas decimais

4.5 Data Frames

Data frames: é uma das estruturas mais importantes para análise de dados.

## Exemplo 01
dados <- data.frame(
  dia = 1:4,
  temperatura = c(25.2, 26.1, 27.0, 26.8)
)
## Exemplo 02

# Criando um data frame
dados <- data.frame(
  data = as.Date('2023-01-01') + 0:6,
  temperatura = c(27.5, 28.2, 26.9, 29.1, 30.0, 28.4, 27.8)
)
print(dados)
        data temperatura
1 2023-01-01        27.5
2 2023-01-02        28.2
3 2023-01-03        26.9
4 2023-01-04        29.1
5 2023-01-05        30.0
6 2023-01-06        28.4
7 2023-01-07        27.8
plot(dados$data, dados$temperatura, type = "o", col = "blue")

## Exemplo 03

# Criando um data frame

dados <- data.frame(
  data = as.Date("2025-03-24") + 0:4,
  temperatura_min = c(22.1, 21.8, 22.4, 23.0, 21.5),
  temperatura_max = c(30.2, 29.8, 31.0, 30.5, 29.7),
  precipitacao = c(0.0, 5.2, 1.0, 0.0, 3.1)
)

# Visualizando os dados
print(dados)
        data temperatura_min temperatura_max precipitacao
1 2025-03-24            22.1            30.2          0.0
2 2025-03-25            21.8            29.8          5.2
3 2025-03-26            22.4            31.0          1.0
4 2025-03-27            23.0            30.5          0.0
5 2025-03-28            21.5            29.7          3.1
# Média de temperatura máxima
mean(dados$temperatura_max)
[1] 30.24
# Filtrando os dias com chuva (precipitação > 0)
dados_com_chuva <- dados[dados$precipitacao > 0, ]

4.6 ✍️ Prática

Agora faça você mesmo!

Crie um data.frame chamado observacoes com 7 dias de dados contendo:

  • Data

  • Umidade relativa (%)

  • Velocidade do vento (km/h)

Depois:

  • Calcule a média da umidade

  • Filtre os dias com vento acima de 15 km/h

Explore
  • Usar head(dados) para ver as primeiras linhas

  • Usar str(dados) para ver o tipo de cada coluna

  • Usar summary(dados) para obter estatísticas básicas

4.7 Listas

Lista: tipo de objeto que pode conter elementos de diferentes tipos: vetor de caracteres, números, matrizes

# Criando uma lista com informações da estação meteorológica
estacao <- list(
  nome = "Estação Chapada das Mesas",
  codigo = "MA123",
  localizacao = c(latitude = -7.3, longitude = -46.0),
  temperaturas = c(28.5, 29.1, 27.8, 30.2),  # em °C
  precipitacoes = c(2.4, 0.0, 1.1, 5.6),     # em mm
  status = TRUE
)

# Acessando elementos da lista
estacao$nome
[1] "Estação Chapada das Mesas"
estacao$localizacao["latitude"]
latitude 
    -7.3 
mean(estacao$temperaturas)
[1] 28.9
# Atualizando o status
estacao$status <- FALSE

4.8 ✍️ Prática

Agora faça você mesmo!

Crie uma lista chamada cidade com os seguintes elementos: - Nome da cidade - População estimada - Vetor com as temperaturas médias dos últimos 7 dias - Valor lógico indicando se há estação meteorológica local

Depois, calcule a média das temperaturas dessa cidade!

4.9 Matrizes em R

Uma matriz é uma estrutura bidimensional (2D) composta por linhas e colunas, onde todos os elementos devem ser do mesmo tipo de dado (geralmente numérico).


4.9.1 Criando uma matriz

# Criando uma matriz com temperaturas (3 dias, 4 horários)
mt_temperatura <- matrix(
  c(22.1, 24.3, 25.5, 23.0,   # Dia 1
    21.8, 23.5, 26.2, 24.1,   # Dia 2
    20.0, 22.4, 24.0, 23.3),  # Dia 3
  nrow = 3,
  ncol = 4,
  byrow = TRUE
)

mt_temperatura
     [,1] [,2] [,3] [,4]
[1,] 22.1 24.3 25.5 23.0
[2,] 21.8 23.5 26.2 24.1
[3,] 20.0 22.4 24.0 23.3
length(mt_temperatura)
[1] 12
dim(mt_temperatura)
[1] 3 4
# Nomeando linhas e colunas
rownames(mt_temperatura) <- c("Dia 1", "Dia 2", "Dia 3")
colnames(mt_temperatura) <- c("06h", "12h", "15h", "18h")

# Visualizar a matriz
mt_temperatura
       06h  12h  15h  18h
Dia 1 22.1 24.3 25.5 23.0
Dia 2 21.8 23.5 26.2 24.1
Dia 3 20.0 22.4 24.0 23.3
#Acessando elementos da 
# Temperatura do Dia 2 às 15h
mt_temperatura["Dia 2", "15h"]
[1] 26.2
# Todas as temperaturas do Dia 3
mt_temperatura["Dia 3", ]
 06h  12h  15h  18h 
20.0 22.4 24.0 23.3 
# Todas as temperaturas às 12h
mt_temperatura[, "12h"]
Dia 1 Dia 2 Dia 3 
 24.3  23.5  22.4 

4.9.2 Aplicando funções

## Realizando operações com matriz

# Média por horário
colMeans(mt_temperatura)
     06h      12h      15h      18h 
21.30000 23.40000 25.23333 23.46667 
# Média por dia
rowMeans(mt_temperatura)
 Dia 1  Dia 2  Dia 3 
23.725 23.900 22.425 
# Temperatura máxima por dia
apply(mt_temperatura, 1, max)
Dia 1 Dia 2 Dia 3 
 25.5  26.2  24.0 

4.9.3 ✍️ Prática

Agora faça você mesmo!

Crie uma matriz com valores de umidade relativa para 5 dias e 3 horários (manhã, tarde e noite).

Em seguida, calcule:

  • A umidade média por horário

  • O valor máximo por dia

  • Qual o menor valor registrado na semana


4.10 Estruturas de controle

Estruturas de controle são blocos de código que controlam o fluxo de execução de um programa. Ou seja, elas determinam quais comandos serão executados, em que ordem e quantas vezes.

Elas são fundamentais porque permitem que o código:

  • Tome decisões (por exemplo: “Se estiver quente, mostre um aviso de calor”);

  • Repita ações (por exemplo: “Para cada dia da semana, calcule a média de temperatura”);

  • Reaja a diferentes situações

Tipo Usado para…
if, else tomar decisões
for repetir uma ação para vários valores
while repetir enquanto uma condição for válida
#Exemplo com if

x <- 25
if (x > 20) {
  print("Está quente")
}
[1] "Está quente"
#Exemplo com if e else

temperatura <- 30
if (temperatura > 28) {
  print("Está quente!")
} else {
  print("Temperatura agradável.")
}
[1] "Está quente!"
#Exemplo com for

dias <- c("Seg", "Ter", "Qua")
for (dia in dias) {
  print(paste("Processando:", dia))
}
[1] "Processando: Seg"
[1] "Processando: Ter"
[1] "Processando: Qua"
#Exemplo com while

x <- 1
while (x <= 3) {
  print(x)
  x <- x + 1
}
[1] 1
[1] 2
[1] 3

4.11 Funções (criadas)

Além das Funções base já existem dentro do programa RCRAN, nós podemos criar nossas próprias funções para organizar e automatizar processos de análise de dados.

As funções são criadas com function().

Podemos passar quantos argumentos quiser.

Pode usar return() ou deixar o último valor ser retornado automaticamente.

sapply() é útil para aplicar uma função a vetores/listas.

# Função para calcular a amplitude térmica do dia
amplitude_termica <- function(temp_max, temp_min) {
  return(temp_max - temp_min)
}

# Usando a função
amplitude_termica(32.5, 21.8)  # resultado: 10.7
[1] 10.7
# Função que classifica temperaturas como "Frio", "Agradável" ou "Quente"

classificar_temp <- function(temp) { 
  if (temp < 20) {
    return("Frio")
  } else if (temp <= 27) {
    return("Agradável") 
  } else { 
    return("Quente") 
  }
}

# Aplicando a função a um vetor

sapply(temperaturas, classificar_temp)
[1] "Quente"    "Quente"    "Quente"    "Agradável" "Quente"   
Agora faça você mesmo!

Crie uma função chamada avaliar_precipitacao() que receba um valor de chuva (em mm) e retorne:

  • “Sem chuva” se for 0

  • “Chuva leve” se for entre 0 e 5 mm

  • “Chuva forte” se for acima de 5 mm

Depois, aplique essa função a um vetor de precipitação com 7 dias.