Menu
Coddy logo textTech

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  TRUE

Puedes 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 50

R 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 40

El 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.

challenge icon

Desafío

Fácil

Recibirás dos líneas de entrada:

  1. Una lista de números separados por comas (por ejemplo, 15,42,8,67,23,91,34,12,56)
  2. Dos valores de umbral separados por una coma que representan un rango (por ejemplo, 20,60)

Usando indexación lógica:

  1. Crea un vector numérico a partir de los números separados por comas
  2. Extrae e imprime todos los elementos que sean menores que el primer umbral (límite inferior)
  3. Extrae e imprime todos los elementos que sean mayores que el segundo umbral (límite superior)
  4. 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,50

La salida debería ser:

[1]  5 10 15
[1] 60 80
[1] 25 45 35 50

Explicació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  TRUE

Use 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 50

Combine condiciones utilizando operadores lógicos como & (AND):

numbers <- c(10, 20, 30, 40, 50)
print(numbers[numbers >= 20 & numbers <= 40])
# Salida: [1] 20 30 40

Prué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 imprimir
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Fundamentos