Filtro em vetores
Os operadores lógicos podem ser utilizados para filtrar vetores e data frames. Para entender de maneira simples como eles funcionam, vamos criar um vetor de números e testar quais deles são maiores que 10:
> vetor = c(1, 5, 10, 15, 25, 50)
> vetor > 10
[1] FALSE FALSE FALSE TRUE TRUE TRUE
Quando utilizamos a expressão vetor > 10
, o R faz um teste lógico com cada elemento do vetor e checa se o número é maior que 10. Quando verdadeiro, ele retorna TRUE
e quando falso ele retorna FALSE
. É possível utilizar esse conjunto de TRUE
/FALSE
para realizar filtros no próprio vetor, quando colocado essa expressão entre colchetes. Veja o exemplo:
> vetor[vetor > 10]
[1] 15 25 50
O código acima, portanto, filtra o vetor apresentado de acordo com o teste lógico aplicado dentre dos colchetes.
Entendendo mais as comparações
Existem vários tipos de comparações que podemos fazer. No exemplo acima vimos a desigualdade maior que, no entanto, temos os seguintes tipos de comparações:
> 1 == 1 # 1 é igual a 1
[1] TRUE
> 1 != 1 # 1 é diferente de 1
[1] FALSE
> 1 > 1 # 1 é maior que 1
[1] FALSE
> 1 < 1 # 1 é menor que 1
[1] FALSE
> 1 >= 1 # 1 é maior ou igual a 1
[1] TRUE
> 1 <= 1 # 1 é menor ou igual a 1
[1] TRUE
Aplicando filtros em data frames
Todas essas comparações podem ser aplicadas para filtrar linhas de data frames também. Vamos construir um data-frame com os dados abaixo:
> nomes = c("João", "Maria", "Daniel", "Aline", "Mariana")
> salario = c(1000, 2500, 2000, 3000, 3500)
> df = data.frame(nomes, salario)
> df
nomes salario
1 João 1000
2 Maria 2500
3 Daniel 2000
4 Aline 3000
5 Mariana 3500
Na tabela acima que temos um conjunto de dados com nomes e salários, se quisermos filtrar para mostrar apenas as pessoas com salário igual ou maior a 3000, fazemos da seguinte forma:
> df[df$salario >= 3000,] # Não esquecer da vírgula no final
nomes salario
4 Aline 3000
5 Mariana 3500
Portanto, colocamos a comparação lógica dentro dos colchetes como primeiro argumento, indicando um filtro para linhas. Para não dar erro, precisamos colocar uma vírgula no final e deixamos o segundo argumento vazio, para que o R entenda que queremos filtrar apenas as linhas.
De forma semelhante, se quisermos filtrar o salário por nome da pessoa, podemos fazer o seguinte para mostrar os dados de João:
> df[df$nome == "João",] # Não se esqueça dos dois sinais de igual
nomes salario
1 João 1000
Operadores lógicos AND e OR
Em uma situação onde você pode ter múltiplos criterios para fazer um filtro, por exemplo, valor de salário entre 2500 e 3000 (incluindo esses valores), você pode utilizar um operador lógico &
. O &
funciona como um concatenador E para duas operações e ele só retorna TRUE
se ambas as condições forem verdadeiras. Veja o exemplo:
> df[df$salario >= 2500 & df$salario <= 3000,]
nomes salario
2 Maria 2500
4 Aline 3000
Existe também o operador lógico |
que funciona como concatenador OU para duas operações. Isso significa que basta uma das comparações ser verdadeira que o retorno será TRUE
. No exemplo abaixo vamos filtrar as linhas cujos nomes são João OU Aline:
> df[df$nome == "João" | df$nome == "Aline",]
nomes salario
1 João 1000
4 Aline 3000
Para praticar
Uma forma de praticar os operadores lógicos é utilizar as bases de dados disponíveis por padrão no R. A base mtcars
possui informações sobre modelos de carro publicados pela revista Motor Trends nos Estados Unidos. Para carregar os dados, utilize os comandos abaixo:
> data(mtcars)
> str(mtcars) # Entenda a estrutura desse data frame
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Note a quantidade grande de colunas que há nesse arquivo. Se você souber um pouco de inglês, pode utilizar a função help()
para obter um descritivo desse conjunto de dados:
help(mtcars)
E para praticar, você pode realizar os seguintes filtros:
- Retornar todos os carros que possuem 6 ou mais cilindros (
cyl
). - Retornar todos os carros que possuem câmbio manual (
am
). - Retornar todos os carros que consomem menos do que 20 miles/gallon (
mpg
) e que pesem menos do que 3k pounds (wt
).
E assim por diante, as possibilidades são bem numerosas!
–
No próximo artigo veremos como trabalhar com arquivos CSV e do Excel, como importar, exportar e verificar a qualidade dos dados.