7.2 Nombres

Un segundo método para extraer subconjuntos es usar los nombres de los elementos en una estructura de datos. Este forma de obtener subconjuntos es usada principalmente con data frames y listas.

De manera similar a los índices, usamos corchetes cuadrados [] después del nombre de un objeto, pero en lugar de escribir un número, escribimos el nombre del elemento que deseamos extraer como una cadena de texto, es decir, entre comillas.

7.2.1 Data frames

Los elementos de un data frame son sus columnas y cada una de ellas tiene un nombre, lo que estamos pidiendo a R con este método es que nos devuelva los elementos cuyo nombre coincida con el que hemos proporcionado

Para mostrar el uso de este método, utilizaremos el mismo data frame que en la sección anterior.

Si escribimos entre corchetes “nombre”, obtendremos toda la columna nombre.

mi_df["nombre"]
##    nombre
## 1 Armando
## 2    Elsa
## 3 Ignacio
## 4    Olga

Al escribir “grupo”, nos es devuelta toda la columna con ese nombre.

mi_df["grupo"]
##   grupo
## 1     0
## 2     1
## 3     1
## 4     0

De igual manera que con los índices, al escribir una coma dentro de los corchetes, estamos pidiendo con ello extraer elementos en más de una dimensión. Lo que está antes escrito antes de la coma corresponde a renglones, y lo que está después, a columnas.

Si ejecutamos lo siguiente, obtendremos NA en lugar de obtener las columnas edad y sexo.

mi_df["edad", "sexo"]
## [1] <NA>
## Levels: H M

Lo anterior ocurre porque R intenta encontrar un renglón llamado “edad” y una columna llamada “sexo”, al no encontrarlas, nos devuelve NA. Recuerda que aunque no es lo más común, los renglones de un data frame pueden tener nombres.

Al igual que con los índices, si damos el nombre de un renglón que existe, obtenemos NA. Es sólo al solicitar un nombre de columna no válido que se nos devuelve un error.

Pedimos un nombre de renglón inexistente y obtenemos NA.

mi_df["localidad", ]
##    nombre edad sexo grupo
## NA   <NA>   NA <NA>    NA

Pero si pedimos un nombre inválido de columna, nos es devuelto un error.

mi_df[, "localidad"]
## Error in `[.data.frame`(mi_df, , "localidad"): undefined columns selected

Para extraer más de una columna, escribimos un vector de texto entre los corchetes. Por ejemplo

mi_df[c("edad", "sexo")]
##   edad sexo
## 1   20    H
## 2   24    M
## 3   22    M
## 4   30    H

Además, las columnas son devueltas en el orden que las pedimos, lo cual es conveniente cuando estamos procesando y recodificando datos.

mi_df[c("sexo", "edad")]
##   sexo edad
## 1    H   20
## 2    M   24
## 3    M   22
## 4    H   30

7.2.2 Listas

Para una lista, el procedimiento es prácticamente el mismo que para un data frame, pero en lugar de obtener columnas, obtenemos los elementos contenidos en ella.

La primera diferencia con los data frame es que, dado que las listas son unidimensionales, si usamos una coma dentro de los corchetes, nos será devuelto un error.

Creamos una lista llamada mi_lista.

mi_lista <- list("uno" = 1, "dos" = "2", "tres" = as.factor(3), 
                 "cuatro" = matrix(1:4, nrow = 2))

Intentamos obtener un subconjunto con una coma.

mi_lista["uno", "dos"]
## Error in mi_lista["uno", "dos"]: incorrect number of dimensions

Si pedimos un nombre que no existe en la lista, se nos devuelve NULL en lugar de un error.

mi_lista["cinco"]
## $<NA>
## NULL

Para todo lo demás, los nombres tienen el mismo comportamiento que para los data frames.

Extremos un elemento de la lista.

mi_lista["dos"]
## $dos
## [1] "2"

Extraemos más de un elemento de la lista.

mi_lista[c("cuatro", "tres")]
## $cuatro
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## $tres
## [1] 3
## Levels: 3