1 Indexação em vetores

  • O seguinte operador [] deve ser usado para selecionar um ou muitos elementos de um vetor.
  • Suponha o vetor a seguir:
Vetor <- c(1,23,3,47,90,6,7,8)
Vetor
## [1]  1 23  3 47 90  6  7  8
  • Para acessar o 5 elemento do vetor faça:
Vetor[5]
## [1] 90
  • É possiver extrair mais de um elemento de uma só vez:
  • Note que os quatro primeiros elementos serão extraídos.
Vetor[c(1,2,3,4)]
## [1]  1 23  3 47
  • Para que um(uns) elemento(s) não seja(m) selecionado(s), execute:
Vetor[-3]
## [1]  1 23 47 90  6  7  8
Vetor[-c(1,4)]
## [1] 23  3 90  6  7  8
  • Também é possivel selecionar mais de um elemento por uma função do R:
Vetor[seq(1, 3)]
## [1]  1 23  3

2 Indexação de listas

  • Para extrair um elemento de uma lista utiliza o seguinte operador [[]].
  • Considere a seguinte lista:
lista <- list( Carros = c("celta", "gol", "bmw"),
               Matriz = matrix(seq(1,6), nrow= 3, ncol= 2),
               Notas = c(rep(10,3), rep(8,2)))
lista
## $Carros
## [1] "celta" "gol"   "bmw"  
## 
## $Matriz
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
## 
## $Notas
## [1] 10 10 10  8  8
  • Para acessar o 2 elemento da lista faça:
lista[[2]]
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
  • Para extrair o 3 item do primeiro elemento da lista:
lista[[1]][3]
## [1] "bmw"
  • Uma lista com elementos nomeados pode ter elementos facilmente acessados utilizando-se o operador $.
lista$Carros[2]
## [1] "gol"
lista$Notas [c(4,5)]
## [1] 8 8

3 Indexação de matrizes

  • Assim como para os vetores, utilizaremos o operador [] para indexar uma matriz, entretanto agora utilizaremos um argumento para linha e outro para coluna.
  • [Linha,Coluna]
Matriz <- lista$Matriz
Matriz
##      [,1] [,2]
## [1,]    1    4
## [2,]    2    5
## [3,]    3    6
  • Para selecionar o terceiro elemento da segunda coluna basta:
Matriz[3,2]
## [1] 6
  • Acessando todos elementos da primeira linha
Matriz[1,]
## [1] 1 4
  • Para manter as dimensões de uma matriz ao extrair um elemento, basta usar o argumento drop = FALSE.
Matriz[, 2, drop = FALSE]
##      [,1]
## [1,]    4
## [2,]    5
## [3,]    6

4 Indexação em Data Frames

  • Utilizaremos [] como operador, assim como em vetores e matrizes.
  • Segue o mesmo príncipio que as matrizes: [ Linha, coluna]
  • O Operador $ também pode ser utilizado para selecionar as colunas do data.frame
df <- data.frame(Nomes = c("Nilton", "Willian", "Lineu", "João"),
                 Idade = c(20,19,21,21),
                 Formado = rep(FALSE, 4))
df
##     Nomes Idade Formado
## 1  Nilton    20   FALSE
## 2 Willian    19   FALSE
## 3   Lineu    21   FALSE
## 4    João    21   FALSE
  • Para acessar o terceiro elemento da primeira coluna:
df[3, 1]
## [1] Lineu
## Levels: João Lineu Nilton Willian
  • A forma mais fácil de extrair um elemento é por meio do operador $, que seleciona a coluna, logo é preciso informar apenas a linha de interesse
df$Idade[3]
## [1] 21
df$Nomes[1]
## [1] Nilton
## Levels: João Lineu Nilton Willian
df[1, "Nomes"]
## [1] Nilton
## Levels: João Lineu Nilton Willian

5 Seleção condicional

  • Apesar de todas classes do R terem sua devida importância, deve-se saber que é mais trabalhada de longe é a classe dos data frames, visto que a grande maioria dos dados que você importará futuramente estarão nesse formato. Nesse caso saber impor condição para poder manipular seus dados tabelados possuem extrema utilidade.

5.1 Seleção condicional em vetores

  • Veremos primeiro a seleção condicional em vetores, pois a partir dela poderemos entender melhor com funcionará para data frames.
vetor2 <- c(18, 12 , 31 , 56 , 7 , 5 , 9 )
vetor2
## [1] 18 12 31 56  7  5  9
  • Para selecionar todos os números maiores que 15
vetor2[vetor2 > 15]
## [1] 18 31 56
  • Entre 30 e 100
vetor2[vetor2 > 30 & vetor2 <100]
## [1] 31 56
  • A condição fora dos colchetes nos fornece a lógica do resultado.
vetor2 > 30 & vetor2 < 100
## [1] FALSE FALSE  TRUE  TRUE FALSE FALSE FALSE
  • Podemos obter pelo pelo operador |, que nesse caso nos fornece o resultado “ou”
vetor2 > 30 | vetor2 < 100
## [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE
  • Vetores de caracteres também podem ser selecionados condicionalmente.
chr <- letters[1:20] ## Criando um objeto com letras
chr
##  [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
## [18] "r" "s" "t"

Selecionando as 5 primeiras letras

chr[1:5]
## [1] "a" "b" "c" "d" "e"
  • Selecionando a letra “e”
chr[chr == "e"]
## [1] "e"
  • Há casos também em que não estamos interessados pelos elementos em si, mas sim pela posição dele de acordo com o nosso condicionamento. Nesse caso podemos usar a função which().

  • Retorna os elementos com valor maior que 15

vetor2[vetor2 > 15] 
## [1] 18 31 56
  • Retorna a posição dos elementos com valor maior que 15
which(vetor2 >15)
## [1] 1 3 4
  • Retorna o elemento “b”
chr[chr == "b"]
## [1] "b"
  • Retorna a posição do elemento “e”
which(chr == "e")
## [1] 5
  • Retorna a posição dos elementos com valor maior que 15 E menor que 100.
which(vetor2 > 15 & vetor2 <100)
## [1] 1 3 4

5.2 Seleção condicional em Data Frames

  • Extremamente importante. Facilitará e muito a manipulação de dados de forma rápida.
  • Utlizaremos inicialmente o operador []
  • Considere o seguinte Data Frame
df2 <- data.frame( ano = seq(2000,2007),
                   lucro = c(1 , 1.5, 3.4, 2.3, 6, 8.3, 7.5, 2.1),
                   Empresa = letters[1:8])
df2
##    ano lucro Empresa
## 1 2000   1.0       a
## 2 2001   1.5       b
## 3 2002   3.4       c
## 4 2003   2.3       d
## 5 2004   6.0       e
## 6 2005   8.3       f
## 7 2006   7.5       g
## 8 2007   2.1       h
- Lucro : Dado em milhões
- Empresa : De "a" a "h"
  • Para fornecer a linha correspondende ao ano de 2005, faça:
df2[df2$ano == 2005,]
##    ano lucro Empresa
## 6 2005   8.3       f
  • Mostrando somente as linhas com lucro maior que 5 milhões
df2[df2$lucro > 5,]
##    ano lucro Empresa
## 5 2004   6.0       e
## 6 2005   8.3       f
## 7 2006   7.5       g
  • Selecionando as linhas com lucro menos que 5 E apenas a coluna “ano”
df2[df2$lucro < 5, "ano"]
## [1] 2000 2001 2002 2003 2007
  • Podemos condicionar diferentes colunas ao mesmo tempo
df2[df2$lucro < 5 & df2$ano < 2005,]
##    ano lucro Empresa
## 1 2000   1.0       a
## 2 2001   1.5       b
## 3 2002   3.4       c
## 4 2003   2.3       d
  • A função subset têm o mesmo príncipio de tudo que foi feito acima, porém facilita o condicionamento.
df2[df2$lucro < 5 & df2$ano < 2005,]
##    ano lucro Empresa
## 1 2000   1.0       a
## 2 2001   1.5       b
## 3 2002   3.4       c
## 4 2003   2.3       d
subset(df2, lucro < 5 & ano < 2005)
##    ano lucro Empresa
## 1 2000   1.0       a
## 2 2001   1.5       b
## 3 2002   3.4       c
## 4 2003   2.3       d

df2[df2$lucro < 5, "ano"]
## [1] 2000 2001 2002 2003 2007
subset(df2, lucro <5 , select= "ano")
##    ano
## 1 2000
## 2 2001
## 3 2002
## 4 2003
## 8 2007
  • A utilização de subset(), é vantajosa pois já lida com NA’S(Valores perdidos), caso eles estejam presentes na sua base de dados.