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