Universidade Federal do Amazonas
Departamento de Estatística

Curso: Introdução à Ciência de Dados
Professor: Leonardo Nascimento
12/12/2023
Versão 1.0

1 Objetos

a <- 2
a = 2
print(a)
#> [1] 2
b <- 1:6
print(b)
#> [1] 1 2 3 4 5 6

2 Vetores

2.1 Vetores atômicos

2.1.1 Lógico

lgl_var <- c(TRUE, FALSE)# lógico
lgl_var <- c(T, F)# lógico
typeof(lgl_var)# verificar o tipo
#> [1] "logical"
is.logical(lgl_var) # testar se o vetor é do tipo lógico
#> [1] TRUE
is.integer(lgl_var)
#> [1] FALSE
length(lgl_var)
#> [1] 2

2.1.2 Double

dbl_var <- c(1, 2.5, 4.5)#forma decimal 
dbl_var <- c(1.23e4)##forma científica 
typeof(dbl_var) 
#> [1] "double"
is.double(dbl_var) # testar se o vetor é do tipo Double 
#> [1] TRUE
is.character(lgl_var)
#> [1] FALSE
length(dbl_var)
#> [1] 1
  • Existem três valores especiais exclusivos para Double: Inf, -Inf e NaN (Not a Number)
dbl_var <- c(Inf,-Inf,NaN)
typeof(dbl_var)
#> [1] "double"

2.1.3 Inteiro

  • Os inteiros são escritos de forma semelhante aos Double, mas devem ser seguidos por L
int_var <- c(1L, 6L, 10L)# inteiro
typeof(int_var)
#> [1] "integer"
is.integer(int_var)
#> [1] TRUE
is.character(int_var)
#> [1] FALSE
length(int_var)
#> [1] 3

2.1.4 Caractere (string)

  • As strings são colocados entre ” ”
chr_var <- c("Leonardo", "Nascimento")
chr_var <- c("Ótimo", "Bom","Ruim")
chr_var <- c("Masculino", "Feminino")
is.character(chr_var)
#> [1] TRUE
typeof(chr_var)
#> [1] "character"

2.1.5 Observações

  • Em um vetor, cada valor ocupa uma posição específica determinada pela ordem em que os elementos foram adicionados durante a criação do vetor.

  • Essa ordem é crucial para acessar cada valor de maneira individual dentro do vetor.

meu_vetor = c(1,2,10,4,5)
meu_vetor[3]
#> [1] 10

2.1.5.1 NULL

  • Embora não seja um vetor, NULLestá intimamente relacionado aos vetores e geralmente desempenha a função de um vetor genérico de comprimento zero.
vetor_null <- c(NULL)
vetor_null
#> NULL
typeof(vetor_null)
#> [1] "NULL"

2.1.5.2 NA

  • Em R, “NA” (Not Available) é usado para representar valores ausentes ou desconhecidos.

  • A maioria dos cálculos envolvendo um valor faltante retornará outro valor faltante.

meu_vetor <- c(10,NA)
2*meu_vetor
#> [1] 20 NA
  • Para verificar se um valor é “NA”, você pode usar a função is.na().
x <- c(1, 2,3,NA, 5)
is.na(x)
#> [1] FALSE FALSE FALSE  TRUE FALSE
  • Muitas funções em R têm maneiras para lidar com valores ausentes. Por exemplo, algumas funções têm argumentos como na.rm para remover NAs durante cálculos
notas_alunos <- c(10, 7, NA, 8, 8.5)
mean(notas_alunos, na.rm = TRUE) # média
#> [1] 8.375
  • Você pode substituir valores NA por outros valores usando a função is.na() e indexação
meu_vetor <- c(1, 2,3, 4, NA)
meu_vetor[is.na(meu_vetor)] <- 0

2.1.6 Coerção

  • Para vetores atômicos, o tipo é uma propriedade de todo o vetor

  • Todos os elementos devem ser do mesmo tipo.

  • Quando você tenta combinar tipos diferentes, eles serão forçados em uma ordem fixa: caractere → double → inteiro → lógico.

y1 <- c(1L,"leonardo") # inteiro, character
y1
#> [1] "1"        "leonardo"
typeof(y1)
#> [1] "character"

y2 <- c(5.5,10L) # double, inteiro
y2
#> [1]  5.5 10.0
typeof(y2)
#> [1] "double"

2.2 Listas

l1 <- list(
  1:3, 
  "a", 
  c(TRUE, FALSE, TRUE), 
  c(2.3, 5.9)
)
print(l1)
#> [[1]]
#> [1] 1 2 3
#> 
#> [[2]]
#> [1] "a"
#> 
#> [[3]]
#> [1]  TRUE FALSE  TRUE
#> 
#> [[4]]
#> [1] 2.3 5.9
typeof(l1)
#> [1] "list"
l1 <- list(
  1:3, 
  "a", 
  c(TRUE, FALSE, TRUE), 
  c(2.3, 5.9)
)
l1[[4]]
#> [1] 2.3 5.9
l1[[4]][1]
#> [1] 2.3
minha_lista = list(1:3)
print(minha_lista)
#> [[1]]
#> [1] 1 2 3
is.list(minha_lista)
#> [1] TRUE
vec <- c(1,2,3)
is.list(vec)
#> [1] FALSE
as.list(vec)
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 2
#> 
#> [[3]]
#> [1] 3

Você pode transformar uma lista em um vetor atômico com unlist().

minha_lista = list(1:3,4:10)
print(minha_lista)
#> [[1]]
#> [1] 1 2 3
#> 
#> [[2]]
#> [1]  4  5  6  7  8  9 10
unlist(minha_lista)
#>  [1]  1  2  3  4  5  6  7  8  9 10

3 Matrizes

# Criando uma matriz 2x2
vec1 = c(1,2)
vec2 = c(3,4)
minha_matriz <- matrix(c(vec1,vec2), nrow = 2, ncol = 2)
minha_matriz
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    2    4
is.matrix(minha_matriz)
#> [1] TRUE
vec1 = c(1,2)
vec2 = c(3,4)
minha_matriz <- matrix(c(vec1,vec2), nrow = 2, ncol = 2,byrow = T)
minha_matriz
#>      [,1] [,2]
#> [1,]    1    2
#> [2,]    3    4
dim(minha_matriz)
#> [1] 2 2
ncol(minha_matriz)
#> [1] 2
nrow(minha_matriz)
#> [1] 2
minha_matriz[1,2] # Acessando o elemento na primeira linha e segunda coluna
#> [1] 2

4 Array

# Criando um array 2x3x2 - linhas X colunas X camadas
vec1 = c(1L,2L,3L,4L)
vec2 = c(5L,6L,7L,8L)
vec2 = c(5L,6L,7L,8L)
meu_array <- array(c(vec1,vec2), dim = c(2,2,3))
meu_array
#> , , 1
#> 
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    2    4
#> 
#> , , 2
#> 
#>      [,1] [,2]
#> [1,]    5    7
#> [2,]    6    8
#> 
#> , , 3
#> 
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    2    4
typeof(meu_array)
#> [1] "integer"
meu_array[1,2,2]# linhas X colunas X camadas
#> [1] 7
meu_array[,,1] # acessando a matriz da primeira camada
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    2    4
meu_array[,,2]# acessando a matriz da segunda camada
#>      [,1] [,2]
#> [1,]    5    7
#> [2,]    6    8

5 Data frame

meu_data_frame <- data.frame(
  Nome = c("Alice","Leo","Vitor"),
  Idade = c(25,30,22),
  Nota = c(85, 92, 78)
)
meu_data_frame
#>    Nome Idade Nota
#> 1 Alice    25   85
#> 2   Leo    30   92
#> 3 Vitor    22   78
dados_climaticos <- data.frame(
  Dia = seq(from = as.Date("2023-01-01"), by = "days", length.out = 5),
  Temperatura = c(25.3, 24.5, 22.0, 26.8, 23.5),
  Umidade = c(65, 70, 75, 60, 80),
  VelocidadeVento = c(10, 12, 8, 15, 9)
)

# Exibindo o data frame
print(dados_climaticos)
#>          Dia Temperatura Umidade VelocidadeVento
#> 1 2023-01-01        25.3      65              10
#> 2 2023-01-02        24.5      70              12
#> 3 2023-01-03        22.0      75               8
#> 4 2023-01-04        26.8      60              15
#> 5 2023-01-05        23.5      80               9
head(dados_climaticos,3)
#>          Dia Temperatura Umidade VelocidadeVento
#> 1 2023-01-01        25.3      65              10
#> 2 2023-01-02        24.5      70              12
#> 3 2023-01-03        22.0      75               8
dados_climaticos$Temperatura
#> [1] 25.3 24.5 22.0 26.8 23.5
dados_climaticos[,2]
#> [1] 25.3 24.5 22.0 26.8 23.5

6 Atributos

6.1 Nomes

meu_vetor <- c(1, 2, 3)
names(meu_vetor) <- c("primeiro", "segundo", "terceiro")
meu_vetor
#> primeiro  segundo terceiro 
#>        1        2        3
attributes(meu_vetor)
#> $names
#> [1] "primeiro" "segundo"  "terceiro"
x1 <- c(a = 1, b = 2, c = 3)
x1
#> a b c 
#> 1 2 3

x2 <- setNames(1:3, c("a", "b", "c"))
x2
#> a b c 
#> 1 2 3

6.2 Dimensão

meu_vetor <- 1:5
meu_vetor
#> [1] 1 2 3 4 5
dim(meu_vetor) <- c(5, 1) # linha x coluna
meu_vetor
#>      [,1]
#> [1,]    1
#> [2,]    2
#> [3,]    3
#> [4,]    4
#> [5,]    5
attributes(meu_vetor)
#> $dim
#> [1] 5 1

6.3 Classe

vec1 = c(1,2)
vec2 = c(3,4)
class(vec1)
#> [1] "numeric"
minha_matriz <- matrix(c(vec1,vec2), nrow = 2, ncol = 2)
minha_matriz
#>      [,1] [,2]
#> [1,]    1    3
#> [2,]    2    4
class(minha_matriz)
#> [1] "matrix" "array"
vec <- c(1,2,3,4)
class(vec)
#> [1] "numeric"
class(vec)<- "minha_classe"
class(vec)
#> [1] "minha_classe"

6.4 Exemplo


pessoa1 <- structure(
  c("Leonardo"), 
  idade = 31,
  last_name = "Nascimento",
  class = "Pessoa",
  names = c("nome_pessoa")
)
pessoa1
#> nome_pessoa 
#>  "Leonardo" 
#> attr(,"idade")
#> [1] 31
#> attr(,"last_name")
#> [1] "Nascimento"
#> attr(,"class")
#> [1] "Pessoa"
class(pessoa1)
#> [1] "Pessoa"
attr(pessoa1,"idade") # selecionado o atributo idade
#> [1] 31
names(pessoa1)
#> [1] "nome_pessoa"

7 Importação/Exportação de dados

7.1 .CSV

dados_sexo_curso <- read.csv("~/GitHub/Introducao_Ciencias_de_Dados/dados/tab_sexo_curso.csv")
head(dados_sexo_curso)
#>   sexo curso
#> 1  Mas   Fís
#> 2  Mas   Fís
#> 3  Mas   Fís
#> 4  Mas   Fís
#> 5  Mas   Fís
#> 6  Mas   Fís
exemplo_csv = data.frame(Pessoa = c("Leo","Lennon"),Idade=c(30,29))
write.csv(exemplo_csv ,"~/GitHub/Introducao_Ciencias_de_Dados/dados/exemplo_csv.csv")

7.2 .TXT

dados_temperatura <- read.table("~/GitHub/Introducao_Ciencias_de_Dados/dados/temperatura.txt") 
head(dados_temperatura)
#>   temperatura
#> 1      23.545
#> 2      26.878
#> 3      33.807
#> 4      26.860
#> 5      24.675
#> 6      27.256
exemplo_txt = data.frame(Pessoa = c("Leo","Lennon"),Idade=c(30,29)) 
write.table(exemplo_txt ,"~/GitHub/Introducao_Ciencias_de_Dados/dados/exemplo_txt.txt")

7.3 .RDS

dados <- readRDS("~/GitHub/Introducao_Ciencias_de_Dados/dados/tempo_exercicio_perda_peso.rds") 
head(dados)
#>   tempo_exercicio perda_peso
#> 1        3.696831   5.978045
#> 2        6.242891  10.833239
#> 3        7.764007  10.846056
#> 4        5.703023   8.170098
#> 5        3.695822   4.126396
#> 6        1.597858   3.247096
exemplo_rds = data.frame(Pessoa = c("Leo","Lennon"),Idade=c(30,29))  
saveRDS(exemplo_rds ,"~/GitHub/Introducao_Ciencias_de_Dados/dados/exemplo_rds.rds")

7.4 Observações

  1. Separadores e Delimitadores:

    • Certifique-se de usar o argumento sep para especificar o separador ou delimitador correto, dependendo do formato do seu arquivo (vírgula, ponto e vírgula, tabulação, etc.).
  2. Encodings:

    • Se você estiver trabalhando com arquivos que contêm caracteres especiais, pode ser necessário especificar o encoding usando o argumento fileEncoding.
  3. Cabeçalho:

    • Utilize o argumento header para indicar se o arquivo contém um cabeçalho ou não (header = TRUE para sim, header = FALSE para não).
  4. Path:

    • Se estiver usando caminhos no Windows, pode ser necessário usar barras invertidas duplas (\\) ou uma única barra invertida (\) para especificar o caminho.

8 Referências