El Operador %in%
Parte de la sección Fundamentos del Journey de R de Coddy — lección 70 de 78.
A veces necesitas comprobar si existen valores dentro de un vector. El operador %in% proporciona una forma limpia de comprobar la pertenencia, devolviendo TRUE para cada elemento que coincida y FALSE en caso contrario.
La sintaxis básica comprueba si los valores de la izquierda existen en el vector de la derecha:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Salida:
[1] TRUETambién puedes comprobar varios valores a la vez. El operador devuelve un vector lógico con un resultado por cada valor que se está probando:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Resultado:
[1] TRUE FALSE TRUEEsto hace que %in% sea perfecto para filtrar. Combinado con la indexación lógica, puedes extraer elementos que pertenecen a un conjunto específico:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Resultado:
[1] 1 3 2El operador %in% es especialmente útil al validar la entrada del usuario o filtrar datos basándose en una lista predefinida de valores aceptables.
Desafío
FácilRecibirás tres líneas de entrada:
- Una lista separada por comas de artículos en tu inventario (por ejemplo,
apple,banana,milk,bread,eggs,cheese) - Una lista separada por comas de artículos en tu lista de compras (por ejemplo,
milk,butter,eggs,juice) - Una lista separada por comas de artículos que están en oferta (por ejemplo,
bread,juice,yogurt)
Usando el operador %in%:
- Crea vectores de caracteres a partir de cada entrada separada por comas
- Verifica qué artículos de la lista de compras ya tienes en tu inventario e imprime el resultado del vector lógico
- Filtra e imprime los artículos de la lista de compras que NO tienes en tu inventario (artículos que necesitas comprar)
- Filtra e imprime los artículos que necesitas comprar que también están en oferta
Por ejemplo, si las entradas son:
apple,banana,milk,bread,eggs
milk,butter,eggs,juice,apple
bread,juice,yogurt,butterLa salida debería ser:
[1] TRUE FALSE TRUE FALSE TRUE
[1] "butter" "juice"
[1] "butter" "juice"Explicación:
- Lista de compras verificada contra el inventario: milk (TRUE), butter (FALSE), eggs (TRUE), juice (FALSE), apple (TRUE)
- Artículos NO en el inventario (necesarios para comprar): butter, juice
- Artículos para comprar que están en oferta: butter y juice están ambos en la lista de ofertas
Usa el operador ! con %in% para encontrar artículos que NO están en un vector.
Hoja de referencia
El operador %in% comprueba si existen valores dentro de un vector, devolviendo TRUE o FALSE:
fruits <- c("apple", "banana", "cherry")
print("banana" %in% fruits)Salida:
[1] TRUECompruebe varios valores a la vez para obtener un vector lógico:
fruits <- c("apple", "banana", "cherry")
check <- c("banana", "grape", "apple")
print(check %in% fruits)Salida:
[1] TRUE FALSE TRUEUse %in% con indexación lógica para filtrar elementos:
numbers <- c(1, 5, 3, 8, 2, 9)
allowed <- c(1, 2, 3)
print(numbers[numbers %in% allowed])Salida:
[1] 1 3 2Use ! con %in% para encontrar elementos que NO están en un vector:
items <- c("milk", "butter", "eggs")
inventory <- c("milk", "eggs")
print(items[!items %in% inventory])Salida:
[1] "butter"Pruébalo tú mismo
# Leer entrada
con <- file("stdin", "r")
inventory_input <- suppressWarnings(readLines(con, n = 1))
shopping_list_input <- suppressWarnings(readLines(con, n = 1))
sale_items_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# TODO: Escribe tu código a continuación
# 1. Crear vectores de caracteres a partir de cada entrada separada por comas usando strsplit()
# 2. Verificar qué artículos de la lista de compras ya tienes en el inventario (usar %in%)
# 3. Filtrar los artículos de la lista de compras que NO tienes en el inventario (usar ! con %in%)
# 4. Filtrar los artículos que necesitas comprar que también están en ofertaEsta 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