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

Trabalhando com tabelas de dados no R

R é uma ferramenta estatística que pode ser utilizada para manipular dados e criar gráficos.

Muitas vezes trabalhar com tabelas pode ser prático para manipulação dos dados. Essa explicação é baseada nesta página, inclusive os dados e exemplos são os mesmos traduzidos.

Vamos utilizar o arquivo 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.

Para ler os dados do arquivo e listar o sumário basta utilizar os comandos abaixo:

> dados_fumantes <- read.csv(file='fumantes.csv',sep=',',header=T)
> summary(dados_fumantes)
 Fumante SE 
 Ex-fumante :141 Alta :211 
 Fumante :116 Baixa: 93 
 Não fumante: 99 Média: 52

O comando read.csv lê um arquivo no formato csv e carrega os dados para dentro do R. O comando summary devolve o sumário dos dados informados.

Você pode criar uma tabela a partir dos dados usando o seguinte comando:

> tabela_fumantes <- table(dados_fumantes$Fumante,dados_fumantes$SE)
> tabela_fumantes

 Alta Baixa Média
 Ex-fumante 92 28 21
 Fumante 51 43 22
 Não fumante 68 22 9

Por exemplo podemos ver que existem 51 fumantes da classe socio-ecônomica alta.

Para criar uma tabela de maneira indireta fazemos primeiro uma matrix com os valores e então convertemos para tabela.

> fumantes <- matrix(c(51,43,22,92,28,21,68,22,9),ncol=3,byrow=TRUE)
> colnames(fumantes) <- c("Alta","Média","Baixa")
> rownames(fumantes) <- c("Fumante","Ex-fumante","Não-fumante")
> fumantes <- as.table(fumantes)
> fumantes
 Alta Média Baixa
Fumante 51 43 22
Ex-fumante 92 28 21
Não-fumante 68 22 9

Existem vários formatos para transformar os dados em gráficos. No exemplo seguinte o primeiro comando, barplot, cria um gráfico com barras e o segundo, plot, com caixas.

> barplot(fumantes,legend=T,beside=T,main='Estado de Fumante por Classe Socio-Ecônomica')
> plot(fumantes,main="Estado de Fumante por Classe Socio-Ecônomica")