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"