Operações para selecionar dados no R

Em um outro post falamos um pouco sobre como trabalhar com tabelas no R. Neste post vamos explicar, baseado nesse post em inglês, sobre como selecionar seus dados uma vez eles carregados no R.

Vamos utilizar o mesmo arquivo de dados do post anterior, chamado fumantes.csv como base dos exemplos, que contém dados fictícios de 356 pessoas. A primeiro coluna representa o estado atual da pessoa em relação ao cigarro, podendo ser: fumante, ex-fumante e não fumante. Para cada uma das pessoas existe também a informação sócio-econômica: baixa, média, alta.

> dados_fumantes <- read.csv(file='fumantes.csv',sep=',',header=T)
> head(dados_fumantes)
 Fumante SE
 1 Ex-fumante Alta
 2 Ex-fumante Alta
 3 Ex-fumante Alta
 4 Ex-fumante Alta
 5 Ex-fumante Alta
 6 Ex-fumante Alta

Para selecionar colunas pelo nome:

> dados_fumantes[,c('Fumante','SE')])
 Fumante SE
 1 Ex-fumante Alta
 2 Ex-fumante Alta
 3 Ex-fumante Alta
 4 Ex-fumante Alta
 5 Ex-fumante Alta
 6 Ex-fumante Alta
 ...

Para selecionar linhas e colunas:

> dados_fumantes[122:127,c('Fumante','SE')]
 Fumante SE
 122 Fumante Alta
 123 Fumante Alta
 124 Fumante Alta
 125 Fumante Alta
 126 Fumante Alta
 127 Fumante Alta

Para selecionar linhas que contém determinada informação, outros operadores como >, >=, < e <= também podem ser utilizados:

> dados_fumantes[dados_fumantes$SE=="Alta",]
 Fumante SE
 1 Ex-fumante Alta
 2 Ex-fumante Alta
 3 Ex-fumante Alta
 4 Ex-fumante Alta
 5 Ex-fumante Alta
 6 Ex-fumante Alta
 ...

Você pode utilizar dados a função grep para seleção:

> dados_fumantes[grep("ex",dados_fumantes$Fumante, ignore.case=T),]
 Fumante SE
 1 Ex-fumante Alta
 2 Ex-fumante Alta
 3 Ex-fumante Alta
 4 Ex-fumante Alta
 5 Ex-fumante Alta
 6 Ex-fumante Alta
 ...

O nome das linhas no R não são necessariamente únicos como nos exemplos anteriores sendo númerico de 1 a 356.
Por exemplo a matrix mat seguinte:

> mat = matrix(1:18, nrow=6, ncol=3)
 > rownames(mat) <- c('a', 'a', 'a', 'b', 'b', 'b')
 > colnames(mat) <- c('foo', 'bar', 'bat')
 > mat
 foo bar bat
 a 1 7 13
 a 2 8 14
 a 3 9 15
 b 4 10 16
 b 5 11 17
 b 6 12 18

Quando você tenta selecionar pelo nome das linhas apenas a primeira linha é retornada:

> mat['a',]
 foo bar bat
 1 7 13
> mat['b',]
 foo bar bat
 4 10 16

Mas este outro comando funciona como esperado:

> mat[rownames(mat)=='a',]
 foo bar bat
 a 1 7 13
 a 2 8 14
 a 3 9 15

Leave a Reply

Your email address will not be published. Required fields are marked *