Como acessar valores dentro de um vetor no R

Introdução:

Indexing significa acessar partes de um objeto por nome ou número para extrair ou substituir valores (Allerhand, 2011)

Os objetos no R (vetores, listas, matrizes, data.frames) possuem partes diferentes. Por exemplo, vetores possuem várias células com valores diferentes, data.frames e matrizes possuem linhas e colunas e listas podem conter vários componentes. Como acessar de forma precisa apenas parte de um objeto no R? Neste mini-tutorial iremos focar nossa atenção em como selecionar e manipular partes de um vetor.

Vetores:

Vamos começar do mais simples para o mais complexo. Primeiro, vamos criar um vetor numérico com 10 elementos e utilizar diferentes formas de extrair/substituir valores deste vetor.

vetor <- c(2,14,12,7,8,15,99,0,2,20)
Como extrair valores de um vetor?

Para fazer isso utilizamos colchetes após o nome do objeto[index] e dentro colocamos os valores que devem ser selecionados (index):

vetor[8]           ### Extrai o oitavo valor 
vetor[1:3]         ### Extrai os três primeiros valores 
vetor[c(1,2,3)]    ### Extrai os três primeiros valores (utilizando a função c())
vetor[c(1,5,10)]   ### Extrai o primeiro, o quinto e o último valor
## [1] 0
## [1]  2 14 12
## [1]  2 14 12
## [1]  2  8 20

Se quiser excluir valores de um vetor, utilize o mesmo método só que com o sinal de - na frente:

vetor[-8]           ### Exclui o oitavo valor 
vetor[-c(1,2,3)]    ### Exclui os três primeiros valores 
vetor[-c(1:8)]      ### Exclui os oito primeiros valores
## [1]  2 14 12  7  8 15 99  2 20
## [1]  7  8 15 99  0  2 20
## [1]  2 20
Como substituir valores de um vetor?

Para fazer isso utilizamos a regra geral objeto[index] <- valor. Por exemplo, para substituir o oitavo elemento por 333:

vetor[8] <- 333
vetor
##  [1]   2  14  12   7   8  15  99 333   2  20

Para substituir múltiplos valores:

vetor[1:4] <- c(10,11,14,15) ### substitui os elementos 1,2,3,4 por 10,11,14,15
vetor[] <- 1                 ### substitui todos elementos por 1
vetor[c(9,10)] <- c(11,100)  ### Substitui os elementos 9 e 10 por 11 e 100
vetor[] <- rnorm(10,10,10)   ### Substitui todos os elementos por valores aleatórios com distribuição normal
### Compare o último vetor com o vetor que foi criado no início:
vetor
##  [1] 17.057321 11.750354  5.723550 16.757274 17.729733 12.279482 29.096551
##  [8] 21.481600  8.517794 11.798754
Como extrair valores de um vetor por condição lógica?

Muitas vezes queremos saber quais valores são maiores/menores que um determinado limite. Para isso, utilizamos uma condição lógica para selecionar os valores.

vetor > 10        ### Quais valores são maiores que 10?
##  [1]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE

Se utilizarmos essa condição lógica dentro dos colchetes []:

vetor[vetor > 10]  ### Seleciona os elementos maiores que 10
vetor[vetor < 5]   ### Seleciona os elementos menores que 5
vetor[vetor >= 8.5]  ### Seleciona os elementos maiores ou iguais a 8.5
vetor[vetor > 0 & vetor< 10]  ### Seleciona os elementos maiores que zero e menores que 10
## [1] 17.05732 11.75035 16.75727 17.72973 12.27948 29.09655 21.48160 11.79875
## numeric(0)
## [1] 17.057321 11.750354 16.757274 17.729733 12.279482 29.096551 21.481600
## [8]  8.517794 11.798754
## [1] 5.723550 8.517794

Referências:

  1. Mike Allerhand, 2011. A Tiny Handbook of R. Springer, ISBN: 978-3-642-17979-2

Deseja contribuir? Entre em contato. Gustavo Paterno - 2014 (paternogbc@gmail.com)