Entenderemos indexación acceder a una parte de un objeto. Recordemos que, en R, tenemos objetos atómicos (de un solo tipo de clases, por ejemplo, solo números, o solo texto) y recursivos. Estos combinaban diferentes objetos con formas distintas, por ejemplo, texto y números. Según chatGPT “en R, "indexar" se refiere a acceder a elementos específicos de un vector, matriz, lista o data frame utilizando su posición numérica o su nombre. Indexar te permite extraer o modificar valores individuales o conjuntos de valores de una estructura de datos”.
En el caso de la indexación numérica, accedemos a parte de ese vector indicando a cuál posición deseamos acceder. Debajo colocamos diferentes ejemplos usando el vector edad.
Ej. 1: La primera posición, colocamos corchetes [] posterior al vector que contienen los elementos al cual queremos acceder (edad en este caso).
edad[1]
[1] 17
Ej. 2: Si el número se coloca en negativo, indica que no queremos acceder a esa parte del vector. Regresa todo, menos la posición indicada con menos.
[1] 22 31 14 12
Ej. 3: Igual podemos acceder a múltiples posiciones de un vector, colocando un vector de números entre los corchetes. Si repites el 1 varias veces te regresara la posición 1 cuantas veces como repitas el 1.
> edad[c(1,4)]
[1] 17 14
Ej. 4: Acceder a la última posición de un vector usando la función length.
edad[length(edad)]
[1] 12
Ej. 5: Igual podemos usar el operador dos puntos para generar una secuencia. Sí le indicamos esta secuencia a R, entonces regresa las posiciones del vector que están dentro de la misma.
edad[1:3]
[1] 17 22 31
Ej. 6: imaginemos ahora que queremos acceder a las dos ultimas posiciones del vector, podemos indicar la longitud de la misma:
edad[c(4,5)]
[1] 14 12
Ej. 7: No obstante, el ejemplo anterior deja de funcionar si agregamos datos al vector anterior:
edad <- c(edad, 14,24)
[1] 17 22 31 14 12 14 24
edad[(length(edad)-1):length(edad)]
[1] 14 24
Ej. 8: Entonces, si queremos eliminar las dos ultimas posiciones de un vector, colocamos el signo de menos delante de la secuencia.
edad[-c((length(edad)-1):length(edad))]
[1] 17 22 31 14 12
INDEXACIÓN LÓGICA
En este caso colocamos un vector lógico entre corchetes, en lugar de números. Este permite acceder a elementos que cumplen con alguna condición, sin importar donde estén colocados los mismos.
Ej. 9: Llamar a los menores de edad.
edad[edad<18]
[1] 17 14 12 14
Ej. 10: Llamar a los que tienen edades
entre 5-15 años.
edad[edad>=5 &
edad<=15]
[1] 14 12 14
Ej. 11:
Podemos indexar a
partir de la información de un segundo vector. Supongamos tenemos el vector
mujer que indica el sexo de las personas. Entonces podemos recuperar las edades
de las mujeres.
mujer<-c(1,0,1,0,1,0,0)
edad[mujer==1]
[1] 17 31 12
Tener pendiente que, si usas esta variable directamente para indexar el vector, este te regresara la primera posición tantas veces como se repita en el vector numérico mujer. Recuerde que este es un vector numérico.
edad[c(1,1,1)]
[1] 17 17 17
edad[mujer]
[1] 17 17 17
Por tanto, si se quiere usar directamente, se debe definir como un vector lógico.
mujer1<-c(T,F,T,F,T,F,F)
edad[mujer1]
OTROS EJEMPLOS
Ej. 12: Indexar utilizando nombres asignados a los datos.
names(edad) <- nombres
edad
Ana Pedro Juana Johan Lia <NA> Julio
17 22 31 14 12 14 24
Juana
31
Ej. 13:
Combinar vectores. Mujeres menores de edad. Si
colocamos el 0, se elegirían mujeres o menores de edad.
Ana Lia
17 12
Como se puede ver hasta aquí, solo es cuestión de usar adecuadamente los operadores lógicos, que vimos en la clase 1.
Ej. 14: acceder a una secuencia de posiciones.
Esta forma de generar secuencias igual nos permite acceder por ejemplo a todas las posiciones pares, 2,4,6,…. Pensar en alguna aplicación, imagine tiene una data mensual, y desea acceder a los meses 1,4,7,10… Para esto usamos la función seq.
[1] 1 2 3 4 5
[1] 1 2 3 4 5
En el siguiente ejemplo accederá a las posiciones entre 1 y 7, iniciando en 1 y avanzando de 2 en e2. 1,3,4…
Ana Juana Lia Julio
Ej. 15: Ordenar de menor a mayor. Como orden regresa la posición que ocupa cada elemento en un vector determinado, caminando de menor a mayor. Como podemos ver en el ejemplo siguiente, se verifica la salida de order, 5, 4, 6, … indica que el menor valor se encuentra en la posición 5 del vector, el segundo menor, en la posición 4, y así de forma sucesiva.
Ana Pedro Juana Johan Lia <NA> Julio
17 22 31 14 12 14 24
[1] 5 4 6 1 2 7 3
Ahora, podemos obtener un vector ordenado de menor a mayor edad.
Lia Johan <NA> Ana Pedro Julio Juana
12 14 14 17 22 24 31
Igual, podemos obtener los nombres, ordenados del menor al mayor.
[1] "Lia" "Johan" NA "Ana" "Pedro" "Julio" "Juana"
Ej. 16: acceder al mínimo y máximo usando order. Solo debemos acceder a las posiciones extremas.
Persona con menor edad.
Lia
12
Persona con mayor edad.
Juana
31
Ej. 17: Indexación con which. Este comando regresa la posición donde la variable cumple con una determinada condición. Por ejemplo, identificar la posición donde se encuentra la persona con la edad mínima.
Lia
5
Entonces, podemos usar esta coordenada para poder recuperar la edad mínima disponible en la data. Antes vimos en qué posición estaba, ahora vemos cual es su edad.
Lia
12
Ej. 18: Podemos seleccionar múltiples nombres usando el operador contenido en. El mismo permite indicar un conjunto de nombres, para posteriormente, buscar estos nombres en el vector de edad.
edad[names(edad) %in% personas_seleccionadas]
Ana Lia Julio
17 12 24
Ej. 19: Acceder a las edades correspondientes a los nombres que no son NA.
Ana Pedro Juana Johan Lia Julio
17 22 31 14 12 24
Ej. 20: Igual podemos usar la indexación para modificar valores de un vector. Podemos verificar que un nombre es NA, entonces podemos identificar ese NA y cambiarlo por Walker.
names(edad) <- nombres
edad
Ana Pedro Juana Johan Lia Walker Julio
17 22 31 14 12 14 24
Ahora vamos a sustituir la edad de Walker, por 16 años. Debido a que el se cambio la edad cuando jugaba pelota. Le quitaron dos años.
edad[nombres ==
"Walker"] <- 16
edad
Ana
Pedro Juana Johan
Lia Walker Julio
17
22 31 14
12 16 24
Espero
les haya sido de utilidad… Gracias por visitarnos.