Segmentación e Indexación de Vectores
Parte de la sección Fundamentos del Journey de R de Coddy — lección 67 de 78.
Has aprendido a acceder a elementos individuales y a iterar a través de vectores. Ahora exploremos cómo extraer múltiples elementos a la vez utilizando el seccionamiento (slicing). Esta técnica te permite obtener un subconjunto de un vector en una sola operación.
Para extraer múltiples elementos, pasa un vector de índices dentro de los corchetes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Salida:
[1] 10 30 50También puedes usar el operador de dos puntos para seleccionar un rango de elementos consecutivos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Salida:
[1] 20 30 40Los índices negativos son potentes en R. Excluyen elementos en lugar de seleccionarlos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Salida:
[1] 10 30 40 50Puedes excluir múltiples elementos pasando un vector de índices negativos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Salida:
[1] 20 30 40Recuerda: no puedes mezclar índices positivos y negativos en la misma selección. R lanzará un error si intentas numbers[c(1, -2)].
Desafío
FácilRecibirás dos líneas de entrada:
- Una lista de números separados por comas (por ejemplo,
100,200,300,400,500,600,700) - Dos índices separados por una coma que representan un rango a excluir (por ejemplo,
2,5)
Realiza las siguientes operaciones:
- Crea un vector numérico a partir de los números separados por comas
- Imprime los elementos en las posiciones 1, 3 y 5 usando un vector de índices
- Imprime los elementos desde la posición 2 hasta la posición 4 usando el operador de dos puntos (colon operator)
- Imprime el vector excluyendo el elemento en el primer índice dado (usando indexación negativa)
- Imprime el vector excluyendo los elementos desde el primer índice hasta el segundo índice (usando indexación negativa con un rango)
Por ejemplo, si las entradas son:
10,20,30,40,50,60,70
3,5La salida debería ser:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Explicación:
- Los elementos en las posiciones 1, 3, 5 son: 10, 30, 50
- Los elementos desde la posición 2 a la 4 son: 20, 30, 40
- Excluir la posición 3 da como resultado: 10, 20, 40, 50, 60, 70
- Excluir las posiciones de la 3 a la 5 da como resultado: 10, 20, 60, 70
Hoja de referencia
Para extraer múltiples elementos de un vector, pase un vector de índices dentro de corchetes:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50Use el operador de dos puntos para seleccionar un rango de elementos consecutivos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40Los índices negativos excluyen elementos en lugar de seleccionarlos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2]) # [1] 10 30 40 50Excluya múltiples elementos pasando un vector de índices negativos:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)]) # [1] 20 30 40Importante: No se pueden mezclar índices positivos y negativos en la misma selección.
Pruébalo tú mismo
# Leer entrada
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Convertir los números separados por comas en un vector numérico
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Convertir los dos índices
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Escribe tu código abajo
# 1. Imprimir elementos en las posiciones 1, 3 y 5 usando un vector de índices
# 2. Imprimir elementos desde la posición 2 hasta la posición 4 usando el operador de dos puntos
# 3. Imprimir el vector con el elemento en idx1 excluido (indexación negativa)
# 4. Imprimir el vector con los elementos desde idx1 hasta idx2 excluidos (indexación negativa con rango)Esta 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