Indexación Lógica
Parte de la sección Fundamentos del Journey de R de Coddy — lección 68 de 78.
En lugar de especificar posiciones exactas, puedes usar un vector lógico para seleccionar elementos. Esta técnica, llamada indexación lógica, te permite filtrar un vector basándote en condiciones en lugar de posiciones.
Cuando aplicas una comparación a un vector, R devuelve un vector lógico de la misma longitud:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)Salida:
[1] FALSE FALSE TRUE TRUE TRUEPuedes usar este vector lógico directamente dentro de los corchetes para extraer los elementos que coincidan:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])Resultado:
[1] 30 40 50R mantiene solo los elementos donde el vector lógico es TRUE. Este enfoque es mucho más limpio que escribir bucles para filtrar datos. Puedes combinar condiciones utilizando operadores lógicos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])Resultado:
[1] 20 30 40El indexado lógico es una de las características más potentes de R para la manipulación de datos, permitiéndote filtrar conjuntos de datos con expresiones sencillas y legibles.
Desafío
FácilRecibirás dos líneas de entrada:
- Una lista de números separados por comas (por ejemplo,
15,42,8,67,23,91,34,12,56) - Dos valores de umbral separados por una coma que representan un rango (por ejemplo,
20,60)
Usando indexación lógica:
- Crea un vector numérico a partir de los números separados por comas
- Extrae e imprime todos los elementos que sean menores que el primer umbral (límite inferior)
- Extrae e imprime todos los elementos que sean mayores que el segundo umbral (límite superior)
- Extrae e imprime todos los elementos que estén dentro del rango (mayores o iguales que el primer umbral Y menores o iguales que el segundo umbral)
Por ejemplo, si las entradas son:
5,25,10,45,60,15,80,35,50
20,50La salida debería ser:
[1] 5 10 15
[1] 60 80
[1] 25 45 35 50Explicación:
- Elementos menores que 20: 5, 10, 15
- Elementos mayores que 50: 60, 80
- Elementos entre 20 y 50 (inclusive): 25, 45, 35, 50
Usa el operador & para combinar condiciones para el filtro de rango.
Hoja de referencia
El indexado lógico le permite filtrar un vector basándose en condiciones en lugar de posiciones. Cuando aplica una comparación a un vector, R devuelve un vector lógico:
numbers <- c(10, 20, 30, 40, 50)
print(numbers > 25)
# Salida: [1] FALSE FALSE TRUE TRUE TRUEUse el vector lógico dentro de corchetes para extraer los elementos coincidentes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers > 25])
# Salida: [1] 30 40 50Combine condiciones utilizando operadores lógicos como & (AND):
numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Salida: [1] 20 30 40Pruébalo tú mismo
# Leer entrada
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
thresholds_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Convertir los números separados por comas en un vector numérico
numbers <- as.numeric(unlist(strsplit(numbers_input, ",")))
# Convertir los valores de los umbrales
thresholds <- as.numeric(unlist(strsplit(thresholds_input, ",")))
lower_bound <- thresholds[1]
upper_bound <- thresholds[2]
# TODO: Escribe tu código a continuación
# 1. Usa indexación lógica para extraer elementos menores que lower_bound e imprimir
# 2. Usa indexación lógica para extraer elementos mayores que upper_bound e imprimir
# 3. Usa indexación lógica con el operador & para extraer elementos dentro del rango (inclusive) e imprimirEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 2
Operadores lógicos (AND, OR)Operadores lógicos Parte 2 (NOT)Resumen - Lógica simpleLógica vectorizada Parte 1Lógica vectorizada Parte 27Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada del usuario10FizzBuzz con un giro
Descripción general del juegoLa función FizzBuzz13Vectores Avanzados
Segmentación e Indexación de VectoresIndexación LógicaAritmética de Vectores y ReciclajeEl Operador %in%2Variables y tipos de datos
Tipo de dato numéricoTipo de dato enteroTipo de dato de caracteresTipo de dato lógicoComprobación de tipos de datosConvenciones de nomenclaturaValores faltantes: NAResumen - Creación de variables8Bucles
Bucle ForBucle WhileBreakNext (Continue)Repaso - FactorialGeneración de secuencias (seq, :)Bucles anidadosRepaso - Entrada dinámica3Operadores Parte 1
Operadores aritméticosDivisión entera y móduloOperadores de asignaciónRepaso - Matemáticas simplesOperadores de comparación6E/S básica
Imprimir salidaCat para salidaSalida con variablesLectura de entrada con readline()Conceptos básicos de conversión de tiposResumen - Calculadora de edadResumen - Verdadero o falso9Funciones
Declarar una funciónArgumentos de una funciónValores de retornoRepaso - Función SigmaRepaso - Función de validaciónValores de parámetros por defecto