Indexação Lógica
Parte da seção Fundamentos do Journey de R da Coddy — lição 68 de 78.
Em vez de especificar posições exatas, você pode usar um vetor lógico para selecionar elementos. Essa técnica, chamada de indexação lógica, permite filtrar um vetor com base em condições em vez de posições.
Quando você aplica uma comparação a um vetor, o R retorna um vetor lógico do mesmo comprimento:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)Saída:
[1] FALSE FALSE TRUE TRUE TRUEVocê pode usar este vetor lógico diretamente dentro de colchetes para extrair elementos correspondentes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])Saída:
[1] 30 40 50O R mantém apenas os elementos onde o vetor lógico é TRUE. Esta abordagem é muito mais limpa do que escrever loops para filtrar dados. Você pode combinar condições usando operadores lógicos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])Saída:
[1] 20 30 40A indexação lógica é um dos recursos mais poderosos do R para manipulação de dados, permitindo que você filtre conjuntos de dados com expressões simples e legíveis.
Desafio
FácilVocê receberá duas linhas de entrada:
- Uma lista de números separados por vírgula (ex:
15,42,8,67,23,91,34,12,56) - Dois valores de limite separados por uma vírgula representando um intervalo (ex:
20,60)
Usando indexação lógica:
- Crie um vetor numérico a partir dos números separados por vírgula
- Extraia e imprima todos os elementos que são menores que o primeiro limite (limite inferior)
- Extraia e imprima todos os elementos que são maiores que o segundo limite (limite superior)
- Extraia e imprima todos os elementos que estão dentro do intervalo (maiores ou iguais ao primeiro limite E menores ou iguais ao segundo limite)
Por exemplo, se as entradas forem:
5,25,10,45,60,15,80,35,50
20,50A saída deve ser:
[1] 5 10 15
[1] 60 80
[1] 25 45 35 50Explicação:
- Elementos menores que 20: 5, 10, 15
- Elementos maiores que 50: 60, 80
- Elementos entre 20 e 50 (inclusive): 25, 45, 35, 50
Use o operador & para combinar condições para o filtro de intervalo.
Folha de consulta
A indexação lógica permite filtrar um vetor com base em condições em vez de posições. Quando você aplica uma comparação a um vetor, o R retorna um vetor lógico:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# Saída: [1] FALSE FALSE TRUE TRUE TRUEUse o vetor lógico dentro de colchetes para extrair os elementos correspondentes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# Saída: [1] 30 40 50Combine condições usando operadores lógicos como & (AND):
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Saída: [1] 20 30 40Experimente você mesmo
# Ler entrada
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Converter os números separados por vírgula em um vetor numérico
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# Converter os valores de limite
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]
# TODO: Escreva seu código abaixo
# 1. Use indexação lógica para extrair elementos menores que lower_bound e imprima
# 2. Use indexação lógica para extrair elementos maiores que upper_bound e imprima
# 3. Use indexação lógica com o operador & para extrair elementos dentro do intervalo (inclusive) e imprimaEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 2
Operadores Lógicos (AND, OR)Operadores Lógicos Parte 2 (NOT)Recapitulação - Lógica SimplesLógica Vetorizada Parte 1Lógica Vetorizada Parte 27Calculadora de Divisão de Conta
Mensagem de Boas-vindasObtendo a Entrada do Usuário10FizzBuzz com um Toque Especial
Visão Geral do JogoA Função FizzBuzz13Vetores Avançados
Fatiamento e Indexação de VetoresIndexação LógicaAritmética de Vetores e ReciclagemO Operador %in%2Variáveis e Tipos de Dados
Tipo de Dado NuméricoTipo de Dado InteiroTipo de Dado CaractereTipo de Dado LógicoVerificando Tipos de DadosConvenções de NomenclaturaValores Ausentes: NARecapitulação - Criação de Variáveis8Laços de Repetição
Laço ForLaço WhileBreakNext (Continue)Recapitulação - FatorialGeração de Sequências (seq, :)Laços AninhadosRecapitulação - Entrada Dinâmica3Operadores Parte 1
Operadores AritméticosDivisão Inteira e MóduloOperadores de AtribuiçãoRecapitulação - Matemática SimplesOperadores de Comparação6IO Básico
Saída com PrintCat para SaídaSaída com VariáveisLendo Entrada com readline()Básico de Conversão de TiposRecapitulação - Calculadora de IdadeRecapitulação - Verdadeiro ou Falso9Funções
Declarando uma FunçãoArgumentos de FunçãoValores de RetornoRecapitulação - Função SigmaRecapitulação - Função de ValidaçãoValores de Parâmetro Padrão