10. Manejo de archivos
Este artículo está dedicado a operaciones comunes en bases de datos. Esto incluye segmentar y combinar bases de datos, eliminar casos con datos omitidos, y ordenar los datos en orden ascendente o descendente basado en alguna variable. En los ejemplos utilizaré tres bases de datos sencillas llamadas datos2a, datos2b y datos2c, con cinco casos y seis o siete variables:
> datos2a
ID Edad it01 it02 it03 it04 it05
1 1 25 5 4 5 5 5
2 2 27 3 4 5 4 3
3 3 33 4 4 4 NA NA
4 4 99 5 2 3 4 3
5 5 23 2 4 4 3 3
> datos2b
ID it06 it07 it08 it09 it10
1 1 5 5 5 4 4
2 2 4 4 4 5 4
3 3 4 4 4 3 3
4 4 3 2 3 3 2
5 5 1 2 3 2 1
> datos2c
ID Edad it01 it02 it03 it04 it05
1 6 22 5 5 5 4 4
2 7 29 4 4 4 5 4
3 8 25 4 4 4 3 3
4 9 27 3 2 3 3 2
5 10 28 1 2 3 2 1
Cómo segmentar una base de datos
A menudo una base de datos contiene más variables o más casos de los que uno desea analizar. En tales casos generalmente se hace más cómodo trabajar con una base de datos reducida que tenga solo las variables de interés para el analista. Para segmentar una base de datos en R se utiliza la notación ‘[ , ]’. Por ejemplo, el comando
> datos <- datos2a[,3:7]
selecciona todos los casos en las columnas 3 a 5 de la base de datos ‘datos2a’ y crea con ellas la base de datos ‘datos’:
> datos
it01 it02 it03 it04 it05
1 5 4 5 5 5
2 3 4 5 4 3
3 4 4 4 NA NA
4 5 2 3 4 3
5 2 4 4 3 3
Si las columnas que se desean seleccionar no están corridas, entonces hay que especificarlas utilizando la función de concatenación ‘c( )’. Por ejemplo, para seleccionar las columnas 2, 4, 5 y 7, podemos usar el siguiente comando:
> datos <- datos2a[,c(2,4,5,7)]
> datos
Edad it02 it03 it05
1 25 4 5 5
2 27 4 5 3
3 33 4 4 NA
4 99 2 3 3
5 23 4 4 3
El mismo procedimiento se puede utilizar para seleccionar casos, excepto que las filas a seleccionar se escriben antes de la coma dentro de ‘[ , ]’, como, por ejemplo:
> datos <- datos2a[2:4,]
> datos
ID Edad it01 it02 it03 it04 it05
2 2 27 3 4 5 4 3
3 3 33 4 4 4 NA NA
4 4 99 5 2 3 4 3
para seleccionar los casos 2 a 4 con todas las columnas, o
> datos <- datos2a[c(2,4,5),]
> datos
ID Edad it01 it02 it03 it04 it05
2 2 27 3 4 5 4 3
4 4 99 5 2 3 4 3
5 5 23 2 4 4 3 3
para seleccionar los casos 2, 4 y 5. Por supuesto, se pueden seleccionar filas y columnas específicas a la misma vez, como se ilustra aquí:
> datos <- datos2a[c(2,4,5),1:3]
> datos
ID Edad it01
2 2 27 3
4 4 99 5
5 5 23 2
Es posible además seleccionar casos que cumplan con algún criterio específico. Esto se logra, nuevamente, mediante la notación ‘[ , ]’. En este ejemplo, se seleccionan los casos en los que los individuos tengan 25 años de edad:
> datos <- datos2a[datos2a$Edad==25,]
> datos
ID Edad it01 it02 it03 it04 it05
1 1 25 5 4 5 5 5
Observe el uso de ‘==’, el símbolo de identidad de R. Además, puesto que no se utilizó el comando attach(datos2a), hay que especificar la variable como datos2a$Edad. En el siguiente ejemplo se seleccionan los individuos con edades menores de 25 años:
> datos <- datos2a[datos2a$Edad<25,]
> datos
ID Edad it01 it02 it03 it04 it05
5 5 23 2 4 4 3 3
Finalmente, en este ejemplo se seleccionan los casos con edades mayores o iguales a 25 años:
> datos <- datos2a[datos2a$Edad>=25,]
> datos
ID Edad it01 it02 it03 it04 it05
1 1 25 5 4 5 5 5
2 2 27 3 4 5 4 3
3 3 33 4 4 4 NA NA
4 4 99 5 2 3 4 3
Cómo combinar dos bases de datos
Si se tienen dos bases de datos con las mismas variables y en las mismas columnas, como son las bases de datos datos2a y datos2c arriba, éstos se pueden combinar verticalmente en una sola base de datos utilizando el comando rbind(). La sintaxis es:
rbind(datos1,datos2)
donde datos1 y datos2 son las dos bases de datos que se desean combinar. En nuestro ejemplo,
> datos2ac <- rbind(datos2a,datos2c)
> datos2ac
ID Edad it01 it02 it03 it04 it05
1 1 25 5 4 5 5 5
2 2 27 3 4 5 4 3
3 3 33 4 4 4 NA NA
4 4 99 5 2 3 4 3
5 5 23 2 4 4 3 3
6 6 22 5 5 5 4 4
7 7 29 4 4 4 5 4
8 8 25 4 4 4 3 3
9 9 27 3 2 3 3 2
10 10 28 1 2 3 2 1
Otra forma de combinar bases de datos ocurre cuando ambas tienen información de los mismos individuos o casos. Esta combinación horizontal se logra mediante la función ‘merge()’. Note que para que esta combinación se logre las dos bases de datos deben tener una variable clave (‘key’) en común. La variable clave podrían ser los nombres o algún número de identificación de estos. Así para combinar las dos bases de datos se escribirá un comando como el siguiente:
merge(datos1,datos2,key=)
Es fundamental que el mismo nombre de la variable clave aparezca en ambas bases de datos. Por ejemplo, las bases de datos datos2a y datos2b cumplen con los requisitos para combinarse horizontalmente:
> datos2ab <- merge(datos2a,datos2b,key=ID)
> datos2ab
ID Edad it01 it02 it03 it04 it05 it06 it07 it08 it09 it10
1 1 25 5 4 5 5 5 5 5 5 4 4
2 2 27 3 4 5 4 3 4 4 4 5 4
3 3 33 4 4 4 NA NA 4 4 4 3 3
4 4 99 5 2 3 4 3 3 2 3 3 2
5 5 23 2 4 4 3 3 1 2 3 2 1
Análisis con datos completos
A menudo ocurre que en una base de datos haya datos faltantes u omitidos y el analista desee realizar sus análisis haciendo uso solo de los casos que tienen la información completa. R provee la función na.omit() para estas situaciones. En el siguiente ejemplo muestra como extraer los casos con datos completos de la base de datos datos2a:
> datos2aNoM <- na.omit(datos2a)
> datos2aNoM
ID Edad it01 it02 it03 it04 it05
1 1 25 5 4 5 5 5
2 2 27 3 4 5 4 3
4 4 99 5 2 3 4 3
5 5 23 2 4 4 3 3
Cómo ordenar una base de datos
Si desea ordenar una base de datos ya sea en orden ascendente o descendente de alguna variable de interés, puede utilizar la función order() u rev(order()). A continuación, se ilustra cómo ordenar la base de datos datos2ac, de forma ascendente por la variable Edad:
> datos2ac.asc <- datos2ac[order(datos2ac$Edad),]
> datos2ac.asc
ID Edad it01 it02 it03 it04 it05
6 6 22 5 5 5 4 4
5 5 23 2 4 4 3 3
1 1 25 5 4 5 5 5
8 8 25 4 4 4 3 3
2 2 27 3 4 5 4 3
9 9 27 3 2 3 3 2
10 10 28 1 2 3 2 1
7 7 29 4 4 4 5 4
3 3 33 4 4 4 NA NA
4 4 99 5 2 3 4 3
El primero de los dos comandos ordena la base de datos ‘datos2ac’ en orden ascendente de la variable ID y lo almacena en la base de datos ‘datos2ac.asc’.
Como segundo ejemplo la base de datos ‘datos2ac’ se ordena en orden descendente de la variable Edad:
Como segundo ejemplo la base de datos ‘datos2ac’ se ordena en orden descendente de la variable Edad:
> datos2ac.des <- datos2ac[rev(order(datos2ac$Edad)),]
> datos2ac.des
ID Edad it01 it02 it03 it04 it05
4 4 99 5 2 3 4 3
3 3 33 4 4 4 NA NA
7 7 29 4 4 4 5 4
10 10 28 1 2 3 2 1
9 9 27 3 2 3 3 2
2 2 27 3 4 5 4 3
8 8 25 4 4 4 3 3
1 1 25 5 4 5 5 5
5 5 23 2 4 4 3 3
6 6 22 5 5 5 4 4