Workshop introdução a linguagem R - Prof. Thiago Marques

Aprofundando em Vetores

Estruturas importantes da base do R

  • Os principais tipos de objetos no r são: numeric, character e lógico
  • Os tipos de classe de objetos são muitas, mas entre elas temos: Datas, vetores, matrizes, dataframes e listas…

Vetor numérico

v1 = c(1,2) 
class(v1) # tipo do objeto
## [1] "numeric"
typeof(v1) # como o R armazena os dados internamente
## [1] "double"

Vetor numérico vetor tipo Date

x <- as.Date('2010-01-01')
class(x) # Date
## [1] "Date"
typeof(x) # double
## [1] "double"
unclass(x) # 14610
## [1] 14610

Indexação dos vetores e funções importantes para se trabalhar com vetores numéricos

Criando e vetor e acessando o terceiro elemento do vetor

v1 = c(1,2,3,4,5)
v1[3] #acessando o terceiro elemento do vetor
## [1] 3

Calculando o tamanho do vetor, pegando o maior elemento e o menor elemento

length(v1)                   #calculando o tamanho do vetor
## [1] 5
max(v1)                      #pegando o maior elemento do vetor
## [1] 5
min(v1)                      #pegando o menor elemento do vetor
## [1] 1

Calculando a raiz quadrada do vetor e criando combinações lineares

sqrt(v1)                     #calculando a raiz quadrada do vetor
## [1] 1.000000 1.414214 1.732051 2.000000 2.236068
v2 = 2*v1                    #criando uma combinação linear de v1
v3 = v1+v2                   #somando vetores 
v4 = c(v3[1],v1[2])          #criando uma combinação de alguns elementos de cada e os concatenando  
v5 = v4+v1                   #somando vetores com tamannhos diferentes  
## Warning in v4 + v1: comprimento do objeto maior não é múltiplo do comprimento
## do objeto menor

Trabalhando com vetores lógicos

teste = v1 %% 2 == 0         #criando um vetor lógico que contém TRUES para pares e FALSE c.contrário        
impar = v1[!teste]           #selecionando só os números ímpares
par = v1[teste]              #selecionando só os números pares  
par2 = which(v1 %% 2 == 0)   #segunda forma de selecionar só os números ímpares
impar2 = which(v1 %% 2 != 0) #segunda forma de selecionar só os números pares
teste_personalizado = ifelse(v1%%2==0,"Par","Ímpar") #personalizando a saída do vetor
any(v1==1)                   #testando se algum elemento do vetor é igual a 1  
## [1] TRUE
all(v1>=0)                   #testando se todos os elementos do vetor são maiores ou iguais a 0
## [1] TRUE

Trabalhando com índices

v1[1:3]                      #selecionando do primeiro ao terceiro elemento do vetor
## [1] 1 2 3
v1[-(1:3)]                   #selecionando todos menos do primeiro ao terceiro elemento do vetor
## [1] 4 5
v1[-4]                       #selecionando todos menos o quarto elemento do vetor
## [1] 1 2 3 5
v1[c(1,2,5)]                 #selecionando só o primeiro, segundo e quinto elemento do vetor
## [1] 1 2 5

Indexação dos vetores e funções importantes para se trabalhar com vetores textos

Trabalhando com vetores strings (Letras)

names(v1) = c("a","b","c","d","e")  #nomeando os elementos do vetor
names(v1) = letters[1:5]           #nomeando os elementos do vetor
v1[v1 %in% c(1,2)]                 #selecionando o elemento 1 e o elemento 2 do vetor
## a b 
## 1 2
v1_2 <- c("a"=1, "b"=2, "c"=3)     #nomeando os elementos do vetor de outra forma
names(v1_2)                        #vendo o nome dos elementos do vetor
## [1] "a" "b" "c"
v1[2] = 0                           #modificando um elemento do vetor
v1[v1>3] = 0                           #modificando um elemento do vetor por teste lógico

sort(v1)                           #ordenando de forma descrescente
## b d e a c 
## 0 0 0 1 3
sort(v1,decreasing = F)            #ordenando de forma crescente
## b d e a c 
## 0 0 0 1 3
rep(v1,10)                         #repete os elementos de um vetor a quantidade desejada
## a b c d e a b c d e a b c d e a b c d e a b c d e a b c d e a b c d e a b c d e 
## 1 0 3 0 0 1 0 3 0 0 1 0 3 0 0 1 0 3 0 0 1 0 3 0 0 1 0 3 0 0 1 0 3 0 0 1 0 3 0 0 
## a b c d e a b c d e 
## 1 0 3 0 0 1 0 3 0 0

Criando mensagens de output

cat("vetor inicial:", v1)          #escreve na tela um texto
## vetor inicial: 1 0 3 0 0
cat("/nvetor inicial:", v1)        #escreve na tela um texto e /n faz pular uma linha
## /nvetor inicial: 1 0 3 0 0
message("/nvetor inicial:", v1)    #escreve na tela um texto e /n faz pular uma linha
## /nvetor inicial:10300
sprintf("meu vetor inicial contem o elemento na primeira entrada %.0f e na segunda entrada o elemento %.0f", v1[1], v1[2]) #escreve textos com padrões de formato decimal desejado
## [1] "meu vetor inicial contem o elemento na primeira entrada 1 e na segunda entrada o elemento 0"

Criando mensagens interativas (Você digita)

mensagem = readline("Qual é o seu vetor?")    #pede pra escrever um texto
## Qual é o seu vetor?
class(mensagem)                            #verifica qual é a classe
## [1] "character"
mensagem_tratada = as.numeric(unlist(strsplit(mensagem, ","))) # strsplit separa com base em um padrão e unlist transforma lista em vetor e transforma em numérico

class(mensagem_tratada)                  #verifica qual é a classe
## [1] "numeric"

Concatenando vetores e minerando padrões

v6 = letters[1:5]                   #cria um vetor com cinco letras
v6_1 = paste(letters[1:5],1:5)      #concatena vetor com números na sequência com espaço
v6_2 = paste0(letters[1:5],1:5)     #concatena vetor com números na sequência sem espaço
v6_3 = paste(v6_2,collapse = ",")   #colapsa o vetor com vírgulas

v7 = c("CBF", "cbf", "nerds", "NERDS")

grep("cbf", v7)                     #diz qual o índice da expressão que se deseja encontrar
## [1] 2
grep("nerds", v7)                   #diz qual o índice da expressão que se deseja encontrar
## [1] 3
grep("cbf", v7, ignore.case = FALSE) #diz qual o índice da expressão que se deseja encontrar diferenciando maiúscula de minúscula
## [1] 2
grep("nERDS", v7, ignore.case = TRUE) #diz qual o índice da expressão que se deseja encontrar sem diferenciar maiúscula de minúscula
## [1] 3 4
grepl("cbf", v7)                     #traz um vetor lógico da expressão que se deseja encontrar com TRUE ou FALSE
## [1] FALSE  TRUE FALSE FALSE
gsub("CBF","FLAMENGO",v7)            #Substituindo um elemento do vetor baseado em padrões
## [1] "FLAMENGO" "cbf"      "nerds"    "NERDS"
cbind(v7,v6)                         #concatena vetores por colunas
## Warning in cbind(v7, v6): number of rows of result is not a multiple of vector
## length (arg 1)
##      v7      v6 
## [1,] "CBF"   "a"
## [2,] "cbf"   "b"
## [3,] "nerds" "c"
## [4,] "NERDS" "d"
## [5,] "CBF"   "e"
rbind(v7,v6)                         #concatena vetores por linhas
## Warning in rbind(v7, v6): number of columns of result is not a multiple of
## vector length (arg 1)
##    [,1]  [,2]  [,3]    [,4]    [,5] 
## v7 "CBF" "cbf" "nerds" "NERDS" "CBF"
## v6 "a"   "b"   "c"     "d"     "e"