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.
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)
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
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
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
Deseja contribuir? Entre em contato. Gustavo Paterno - 2014 (paternogbc@gmail.com)