Lab_02b_Estruturas de dados no R

Author

Henrique Alvarenga

Published

11 de setembro de 2024

Laboratório 3 - Introdução ao R

Objetos do R

Em R, os tipos de dados e as estruturas de dados são conceitos fundamentais, mas distintos, que se complementam na manipulação de informações.

Os tipos de dados referem-se às classes que R pode manipular. Cada tipo de dado determina o tipo de operação que pode ser realizada e a forma como os dados são armazenados. Por exemplo, o tipo numeric abrange números de ponto flutuante, enquanto integer inclui apenas valores inteiros. O tipo character se refere a dados textuais ou strings, logical trata de valores booleanos (TRUE ou FALSE), e complex abrange números complexos. Existe também o tipo raw, que representa bytes brutos. Esses tipos de dados são fundamentais para definir as características básicas dos valores individuais em R.

As estruturas de dados, por outro lado, referem-se às maneiras como esses valores individuais podem ser organizados e armazenados em coleções. Enquanto os tipos de dados tratam de valores individuais, as estruturas de dados lidam com conjuntos de valores.

Vetores (vectors) são estruturas unidimensionais homogêneas, onde todos os elementos são do mesmo tipo. Fatores (factors) são usados para representar dados categóricos e são uma forma especializada de vetor. Listas (lists) são estruturas heterogêneas, onde os elementos podem ser de diferentes tipos, oferecendo uma flexibilidade significativa na manipulação de dados complexos.

Matrizes (matrices) são conjuntos bidimensionais e homogêneas, adequadas para dados tabulares. enquanto que as arrays são uma extensão das matrizes para múltiplas dimensões, mantendo a homogeneidade dos dados. Os data frames são estruturas bidimensionais heterogêneas, onde cada coluna pode conter diferentes tipos de dados, sendo amplamente usados para manipulação de dados tabulares em análises estatísticas. Veremos adiantes que as Tibbles são data frames modernos.

Vamos criar no código abaixo diversas dessas estruturas.

Criando vetores

Code
# Vetor - Um conjunto de valores do mesmo tipo (númerico, caractere, lógico).
# Exemplo: Idades e nomes de um grupo de pacientes
idades <- c(23,       45,      34,       52,         29)
nomes  <- c("Joana", "Maria", "Antônio", "Henrique", "Leo") 

# Verificanto o tipo de objeto, sua classe:
class(idades)
[1] "numeric"
Code
class(nomes)
[1] "character"
Code
# Vetor de dados categóricos - Usado para representar dados categóricos. 
# Exemplo: Tipos sanguíneos de pacientes
tipos_sanguineos <- factor(c("A", "B", "O", "AB", "A", "A", "B", "O", "AB", "A", "A", "B", "AB", "AB", "AB"))

# Verificanto o tipo de objeto, sua classe:
class(tipos_sanguineos)
[1] "factor"

Tabulando dados de uma variável categórica

Code
# Tabela - Para contagem de frequências.
# Exemplo: Contagem de diferentes tipos sanguíneos em uma amostra de pacientes
tabela_1 <- table(tipos_sanguineos)
print(tabela_1)
tipos_sanguineos
 A AB  B  O 
 5  5  3  2 

Criando Matrizes

Code
# Matriz - Uma tabela bidimensional onde todos os elementos são do mesmo tipo.
# Exemplo: Resultados de exames de 3 pacientes para 4 diferentes exames
exames <- matrix(c(90, 85, 88, 95, 70, 75, 78, 82, 65, 72, 77, 80), nrow=3, byrow=TRUE)


# nomeando as coluilnas e as linhas da matriz
colnames(exames) <- c("Exame1", "Exame2", "Exame3", "Exame4")
rownames(exames) <- c("Paciente1", "Paciente2", "Paciente3")


# Verificanto o tipo de objeto, sua classe:
class(exames)
[1] "matrix" "array" 
Code
# Mostrando a matriz criada
exames
          Exame1 Exame2 Exame3 Exame4
Paciente1     90     85     88     95
Paciente2     70     75     78     82
Paciente3     65     72     77     80

Criando data frames

Code
# Data Frame - Semelhante a uma matriz, mas pode conter diferentes tipos de dados em diferentes colunas.
# Exemplo: Dados demográficos e resultados de exames de pacientes
pacientes <- data.frame(
  ID = c(1, 2, 3),
  Nome = c("Ana", "Bruno", "Carla"),
  Idade = c(25, 37, 29),
  Sexo = factor(c("Feminino", "Masculino", "Feminino")),
  Exame1 = c(90, 70, 65),
  Exame2 = c(85, 75, 72)
)

# Verificanto o tipo de objeto, sua classe:
class(pacientes)
[1] "data.frame"
Code
# Mostrando o data frame criado
print(pacientes)
  ID  Nome Idade      Sexo Exame1 Exame2
1  1   Ana    25  Feminino     90     85
2  2 Bruno    37 Masculino     70     75
3  3 Carla    29  Feminino     65     72
Code
# Data Frame com missing data (NA) - Representa a ausência de valores.
# Exemplo: Dados de exames onde algumas informações estão ausentes
exames_com_na <- data.frame(
  Paciente = c("Ana", "Bruno", "Carla"),
  Exame1 = c(90, NA, 65),
  Exame2 = c(NA, 75, 72),
  Exame3 = c(88, 80, NA)
)
print(exames_com_na)
  Paciente Exame1 Exame2 Exame3
1      Ana     90     NA     88
2    Bruno     NA     75     80
3    Carla     65     72     NA

Criando Listas

Code
# Lista - Pode conter diferentes tipos de dados, como vetores, fatores, matrizes, e data frames.
# Exemplo: Informações completas sobre um único paciente
paciente_info <- list(
  ID = 1,
  Nome = "Ana",
  Idade = 25,
  Tipo_Sanguineo = factor("A"),
  Resultados_Exames = c(90, 85, 95, 88),
  Histórico = data.frame(
    Ano = c(2020, 2021, 2022),
    Consulta = c("Check-up", "Exame rotineiro", "Tratamento de infecção")
  )
)
print(paciente_info)
$ID
[1] 1

$Nome
[1] "Ana"

$Idade
[1] 25

$Tipo_Sanguineo
[1] A
Levels: A

$Resultados_Exames
[1] 90 85 95 88

$Histórico
   Ano               Consulta
1 2020               Check-up
2 2021        Exame rotineiro
3 2022 Tratamento de infecção