Introdução

Vetores são umas das estruturas mais usadas no R. Todo tipo de cálculo no fim acaba sendo feito no nível dos vetores. Portanto entender essa estrutura é fundamental para quem está começando no R.

O que são vetores no R

Vetores são matrizes unidimensionais que podem conter números inteiros, números reais(ponto flutuante com dupla precisão), complexos, caracteres(strings) ou valores lógicos.

Criando vetores

Vetor de um único elemento
##caracter##
print('vetor')
## [1] "vetor"
# dupla precisão
print(12.5)
## [1] 12.5
# inteiro
print(63L)
## [1] 63
# logico
print(TRUE)
## [1] TRUE
# complexo.
print(2+3i)
## [1] 2+3i
Vetores de múltiplos elementos
Usando o operador de dois pontos com dados numéricos
##vetor de 10 a 20
i <-10:20
i
##  [1] 10 11 12 13 14 15 16 17 18 19 20
v<- 1.6:5.6
v
## [1] 1.6 2.6 3.6 4.6 5.6
Usando o operador seq com dados numéricos

A vantagem do operador seq é que você pode definir o passo da sequência

##vetor de 2 a 20 com passo 2
 a <- seq(2,20,2)  # numeros pares até 20
a
##  [1]  2  4  6  8 10 12 14 16 18 20
u<- seq(1,20,2)  # numeros impares ate 20
u
##  [1]  1  3  5  7  9 11 13 15 17 19
Usando a função de combinação c():
###vetor com elemntos numericos
nvec <- c(1,2,3,4,5)
class(nvec)
## [1] "numeric"
print(nvec)
## [1] 1 2 3 4 5
# Vetor de caracteres ou strings
cvec <- c('B','R','A')
class(cvec)
## [1] "character"
print(cvec)
## [1] "B" "R" "A"
# vetor lógico
lvec <- c(TRUE,FALSE)
class(lvec)
## [1] "logical"
print(lvec)
## [1]  TRUE FALSE

Observe que não podemos misturar tipos de dados diferentes em cada entrada do vetor pois o R irá forçar todos os elementos a ser do mesmo tipo. No R para misturar dados de diferentes tipos pode ser usado as listas que não vamos tratar nesse artigo.

Como exemplo do que falamos acima veja:

v <- c(TRUE,5)
class(v)  ## transformou em numérico
## [1] "numeric"
print(v) 
## [1] 1 5
u <- c('a', 22)
class(u)     ## transformou em caracter
## [1] "character"
print(u)
## [1] "a"  "22"

Nomeando Vetores

Podemos usar a função names() para atribuir nomes a cada elemento em nosso vetor. Por exemplo, imagine o seguinte vetor de alturas:

alt <- c(72,71,68,73,69,75)

Temos 6 alturas de 6 pessoas diferentes. Suponha que os nomes de cada um seja: Carlos, Ricardo, Sofia, Flávio, Amanda, Rodrigo. A função names() pode ser usada assim:

names(alt)<- c('Carlos', 'Ricardo', 'Sofia', 'Flávio', 'Amanda', 'Rodrigo')

Note o que acontece com o vetor alt:

alt
##  Carlos Ricardo   Sofia  Flávio  Amanda Rodrigo 
##      72      71      68      73      69      75

Acessando elementos de vetores

Você pode usar a notação de colchetes para indexar e acessar elementos individuais de um vetor:

Sejam os vetores v e u:

v <- c(100,200,300)
u <- c('a','b','c')

print(v)
## [1] 100 200 300
print(u)
## [1] "a" "b" "c"

A indexação funciona usando colchetes e passando a posição do índice do elemento como um número. Lembre-se de que o índice começa em 1 (em algumas outras linguagens de programação como o Python por exemplo, a indexação começa em 0).

# acessando o segundo elemento
v[2]
## [1] 200
# acessando o terceiro elemento
u[3]
## [1] "c"
Acessando múltiplos valores

Podemos pegar vários itens de um vetor passando um vetor de posições de índice dentro dos colchetes. Por exemplo:

# acessando o  primeiro e segundo elemento do vetor v
v[c(1,2)]
## [1] 100 200
# acessando o  terceiro e primeiro elemento do vetor v
v[c(3,1)]
## [1] 300 100
# acessando o  segund e terceiro elemento do vetor u
u[c(2,3)]
## [1] "b" "c"
Fatiamento

Você pode usar dois pontos (:) para indicar uma “fatia de um vetor. O formato é:

vetor [start_index: stop_index] e você terá aquela “fatia” do vetor retornada para você. Por exemplo:

p <- c(1,2,3,4,5,6,7,8,9,10)
p[4:8]
## [1] 4 5 6 7 8
p[2:6]
## [1] 2 3 4 5 6

Observe como o elemento de índice inicial e o índice de parada estão incluídos no resultado do fatiamento!

Indexando pelo nome

Vimos anteriormente que podemos associar nomes a vetores:

v <- c(13,24,35,46)
names(v) <- c('a','b','c','d')

Podemos usar esses nomes junto com os colchetes de indexação para pegar elementos individuais do vetor:

v['c']
##  c 
## 35

Ou passe um vetor de nomes que queremos pegar ou visualizar:

#podemos selecionar fora de ordem:
v[c('d','c')]
##  d  c 
## 46 35

Operadores de Comparação e Seleção

Podemos usar operadores de comparação para filtrar elementos de um vetor

Seja o vetor v que usamos acima:

v
##  a  b  c  d 
## 13 24 35 46

Veja o que acontece se quisermos encontrar os valores v que são maiores que 30 usando o operador maior que (>):

v>30
##     a     b     c     d 
## FALSE FALSE  TRUE  TRUE

Observe que o retorno foi um vetor lógico onde retornou TRUE se a condição for verdadeira e FALSE se a condição for falsa.

Se quisermos filtrar os valores de v que são maiores que 30 podemos usar a notação de colchetes da seguinte forma:

v[v>30]
##  c  d 
## 35 46

Podemos associar os valores logicos a uma variavel e usá-la como filtro na notação de colchetes:

filtro <- v>30
filtro
##     a     b     c     d 
## FALSE FALSE  TRUE  TRUE
v[filtro]
##  c  d 
## 35 46

Calculo com vetores

Podemos realizar várias operações aritméticas com vetores e elas são feitas a cada elemento Sejam v e u:

u <- c(11,12,13)
v <- c( 14,15,16)
Soma de vetores
u+v
## [1] 25 27 29
Subtração de vetores
u-v
## [1] -3 -3 -3
Multiplicação de vetores
v*u
## [1] 154 180 208
Divisão de vetores
u/v
## [1] 0.7857143 0.8000000 0.8125000

Funções com vetores

Vamos aprender sobre algumas funções úteis que podemos usar com vetores. Uma função tem o formato:

nome_da_funcao(entrada)

Por exemplo, se você quiser somar todos os elementos em um vetor numérico, use a função sum (). vejamos:

sum(v)
## [1] 45

Produto de elementos:

prod(u)
## [1] 1716

Máximo e Mínimo

max(v)
## [1] 16
min(u)
## [1] 11

Variancia

var(u)
## [1] 1

Desvio Padrão

sd(v)
## [1] 1

É claro que existem outras funções no R. Você descobrirá mais conforme aparecer a necessidade, inclusive pode criar suas próprias funções para resolver o seu problema específico!

Espero que tenha ajudado a entender melhor vetores no R. Até o próximo!

Keep calm and analysing data!