Hay muchas operaciones que se pueden hacer en una base de datos, a continuación veremos algunas de las operaciones básicas además de la transformación de formatos largo a ancho y viceversa.

Para este tutorial utilizaremos una base de datos disponible en todas las versiones de R que se llama mtcars. Para importarla al espacio de trabajo necesitamos correr el siguiente código:

data("mtcars")

Esta base de datos contiene información sobre características físicas y consumo de combustible de automóviles vendidos en Estados Unidos. Sobre esta base de datos haremos las siguientes operaciones:

  1. Extraer columnas
  2. Extraer filas condicionalmente
  3. Separar y unir tablas
  4. Ordenar de acuerdo con los valores de alguna columna
  5. Agrupar de acuerdo con alguna variable categórica

Para este ejercicio utilizaremos el paquete plyr, y si no lo tienen instalado se puede hacer con el siguiente código:

install.packages("plyr")

1 Extraer columnas

Para esta operación utilizaremos la función subset que quiere decir subconjunto. Para poder realizar esta operación necesitamos conocer los nombres de las columnas de la base mtcars mediante la función names:

##  [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear"
## [11] "carb"

Para conocer el significado de cada una de las variables se puede consutar la ayuda de R:

?mtcars

Entonces para crear una tabla subconjunto de mtcars que contenga las variables mpg (millas por galón), cyl (número de cilindros) y hp (caballos de fuerza), corremos el código siguiente:

mtcars.1 <- subset(mtcars, select = c("mpg", "cyl", "hp"))

El prier argumento es la nombre del objeto que contiene la tabla que queremos procesar (mtcars), el segundo argumento, select es una cadena de caracteres que contenga los nombres de las columnas que queremos extraer (resultado en tabla 1.1).

Table 1.1: Primeras seis columnas de la tabla subconjunto de mtcars con las columnas mpg, cyl y hp.
mpg cyl hp
Mazda RX4 21.0 6 110
Mazda RX4 Wag 21.0 6 110
Datsun 710 22.8 4 93
Hornet 4 Drive 21.4 6 110
Hornet Sportabout 18.7 8 175
Valiant 18.1 6 105

Como resulta evidente, el resultado es otra tabla, con el mismo formato pero que sólo contiene las columnas que indicamos a la función subset

2 Extraer filas condicionalmente

Al igual que ya extrajimos sólo una fracción de las columnas podemos extraer filas. Al decir condicionalmente nos referimos a que necesitamos identificar un criterio para extraer las filas. Por ejemplo, la variable vs indica si un vehículo tiene motor en v (0) ó en línea (1). Entonces si deseamos crear una base que contenga sólo los datos para vehículos con motor en v:

mtcars.vs <- subset(mtcars, vs == 0)

la condición para crear el subconjunto es que la variable vs valga 0. El operador == es de tipo lógico e indica igual a. Otros operadores lógicos son:

  1. !=, diferente de
  2. >, mayor que
  3. <, menor que

Por lo tanto, las siguientes son algunas alternativas para hacer la misma operación:

subset(mtcars, vs != 1)
subset(mtcars, vs < 1)

Asimismo, es posible utilizsar más de un criterio de manera simultánea, por ejemplo extrayendo las filas donde vs == 0 y am == 1 (automático–0– o manual–1):

mtcars.2 <- subset(mtcars, vs == 0 & am == 1)

3 Separar y unir tablas

En ocasiones es necesario capturar datos en tablas separadas, de modo que aprender a unirlas es una habilidad importante. Hay diferentes maneras de unir tablas:

  1. Añadir columnas
  2. Añadir filas

3.1 Unir columnas

Al efectuar esta operación estamos introduciendo variables nuevas a una tabla, y por lo tanto nuevas descripciones de nuestras unidades observacionales. Por lo tanto es de suma importancia que las filas coincidan para cada una de las unidades y que ambas tablas a unir tengan el mismo número de filas. Por ejemplo, si hubiésemos capturado la base mtcars en dos tablas separadas, tenemos que asegurarnos de que la fila 1 de ambas bases contenga la información necesaria del vehículo Mazda RX4. Las tablas 3.1 y 3.2 muestran a mtcars dividida en dos.

Table 3.1: Primeras seis filas de de las primeras cinco columnas de mtcars.
mpg cyl disp hp drat
Mazda RX4 21.0 6 160 110 3.90
Mazda RX4 Wag 21.0 6 160 110 3.90
Datsun 710 22.8 4 108 93 3.85
Hornet 4 Drive 21.4 6 258 110 3.08
Hornet Sportabout 18.7 8 360 175 3.15
Valiant 18.1 6 225 105 2.76
Table 3.2: Primeras seis filas de las últimas cinco columnas de mtcars.
wt qsec vs am gear
Mazda RX4 2.620 16.46 0 1 4
Mazda RX4 Wag 2.875 17.02 0 1 4
Datsun 710 2.320 18.61 1 1 4
Hornet 4 Drive 3.215 19.44 1 0 3
Hornet Sportabout 3.440 17.02 0 0 3
Valiant 3.460 20.22 1 0 3

Para unir estas dos tablas, podemos utilizar la función cbind, que quiere decir column bind (unir columnas):

mtcars.f <- cbind(mtcars.l, mtcars.d)

Los argumentos que se utilizan en cbind son todas las tablas que querramos unir en una misma base de datos.

3.2 Unir filas

Así como en la adición de columnas teníamos que asegurarnos de tener el mismo número de filas, para añadir filas tenemos que asegurarnos de tener el mismo número de columnas, de modo que las variables que continene cada una de las tablas sean las mismas y en el mismo orden. La función que realiza esta operación es rbind, y funciona de la misma manera que cbind:

mtcars.f2 <- rbind(mtcars.t, mtcars.b)

4 Ordenar de acuerdo con valores

En frecuente que las bases de datos no sigan un órden lógico, a menos que hayan sido colectadas de manera secuencia como en una línea temporal. Por lo tanto es de suma utilidad saber cómo se puede ordenar una base de datos. Como es de esperarse, se debe cumplir que el criterio de ordenamiento, debe afectar a todas las columnas, de modo que no se mezcle la información que corresponde con individuos distintos. Aquí cabe hacer una advertencia, y es que ordenar una columna es un ejercicio muy sencillo, que se puede hacer en Excel, sin embargo, por defecto el orden sólo se aplica a una columna lo que invalida toda la base de datos.

Para ordenar una tabla en R utilizaremos el paquete plyr. Para instalarlo podemos ejecutar la siquiente línea de código:

install.packages("dplyr")

Y para abrirlo una vez instalado:

library(dplyr)

El paquete dplyr utiliza una sintaxis un tanto diferente de muchos paquetes de R. Normalmente, se llama la función y dentro de los paréntesis se indica al objeto que se procesará. En este caso, primero se llama el objeto (mtcars, por ejemplo) y después se indica la función que se aplicará al objeto y los argumentos siguientes depués del operador %>%. La función que ordena una tabla es arrange:

mtcars.desc <- mtcars %>% arrange(desc(mpg))

donde hemos creado un nuevo objeto mtcars.desc ordenado de mayor a menor (descendiente) con base en la columna mpg. Para ordenar ascendentemente (tabla 4.1):

mtcars.asc <- mtcars %>% arrange(mpg)
Table 4.1: Base de datos mtcars ordenada con base en la columna mpg de mayor a menor.
mpg cyl disp hp drat wt qsec vs am gear carb
Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2

Este método, puede aplicarse con más de una columna en mente, priorizando de izquierda a derecha:

mtcars.ord1 <- mtcars %>% arrange(mpg, desc(hp))

5 Agrupar de acuerdo con una variable categórica

Las bases de datos se pueden resumir de algunas maneras, por ejemplo en mtcars podríamos calcular el consumo promedio de combustible de los vehículos con 4, 6 y 8 cilindros. Además del promedio también podríamos obtener la desviación estándar. No son operaciones complicadas, pero cuando la base de datos es grande, hacerlo a mano puede requerir de mucho tiempo. Afortunadamente, contamos con dplyr para ejecutar esta opeación de manera eficiente, con la función group_by y summarise (tabla 5.1):

mtcars.prom <- mtcars %>% group_by(cyl) %>% summarise(mpg = mean(mpg), hp = mean(hp))
Table 5.1: Base mtcars agrupada por número de cilindros en las columnas mpg y hp.
cyl mpg hp
4 26.66364 82.63636
6 19.74286 122.28571
8 15.10000 209.21429

Código fuente de este tutorial

Regresar al índice del curso