hllinas2023

1 Los data frames

Generalmente, en estadística, las bases de datos tienen la estructura que se muestra en la imagen de abajo:

Este tipo de estructura se organiza en R en objetos del tipo data frame, el cual es un caso especial de una lista. En general, los data frame representan conjuntos de información expresada en columnas y filas. Actualmente, es el formato de entrada de nuestros datos más frecuente para los análisis estadísticos (dentro de R, pero también para otros programas estadísticos y, por supuesto, para softwares de hojas de cálculo).

Observaciones:

  1. Es importante resaltar que los data frame son apropiados para describir matrices de datos, donde cada fila representa a un individuo u observación y cada columna, una variable (numéricas o categóricas).

  2. Las componentes de un data frame pueden ser vectores, factores, matrices numéricas u otros data.frames.

  3. Debido a que un vector representa una variable de la base de datos y las columnas de una matriz representan varias variables de esa misma base, es importante señalar que la longitud de los vectores debe ser la misma y coincidir con el número de filas de las matrices.

  4. Para el caso en que los datosas variables no sean numéricas, entonces, la estructura del data.frame los considera factores.

2 Creando data frames

Los data.frame se crean con la función data.frame(). A continuación, dos ejemplos:

Ejemplo 1

A <- c("Masculino", "Femenino", "Masculino", "Masculino", "Femenino", "Masculino", "Femenino", "Masculino", "Masculino", "Femenino") 
B <- c(0, 1, 1, 0, 1, 1, 0, 1, 0, 0)
df <- data.frame(Genero = A, Binario = B); df
##       Genero Binario
## 1  Masculino       0
## 2   Femenino       1
## 3  Masculino       1
## 4  Masculino       0
## 5   Femenino       1
## 6  Masculino       1
## 7   Femenino       0
## 8  Masculino       1
## 9  Masculino       0
## 10  Femenino       0

Ejemplo 2

datos <- data.frame(Estrato=c(4,3,1,6), Año=c(2000,1999,1969,1970), Puntaje=c(3.5, 4.3, 2.2, 3.8), Sexo=c("M","M","F","M")); datos
##   Estrato  Año Puntaje Sexo
## 1       4 2000     3.5    M
## 2       3 1999     4.3    M
## 3       1 1969     2.2    F
## 4       6 1970     3.8    M

3 Combinar data frames

Se puede llevar a cabo por columnas y/o por filas:

  1. rbind(A,B) combina por filas los data frames A y B.

  2. cbind(A,B) combina por columnas los data frames A y B.

Ejemplo 3

Consideremos los data frames A y B:

A <- 1:5;
B <- c("a", "b", "c", "d", "e")

Podemos construir un data frame uniendo por filas a A y B:

PorFila <- rbind(A,B); PorFila
##   [,1] [,2] [,3] [,4] [,5]
## A "1"  "2"  "3"  "4"  "5" 
## B "a"  "b"  "c"  "d"  "e"

Ejemplo 4

Podemos construir un data frame uniendo por columnas a A y B:

PorColumna <- cbind(A,B); PorColumna
##      A   B  
## [1,] "1" "a"
## [2,] "2" "b"
## [3,] "3" "c"
## [4,] "4" "d"
## [5,] "5" "e"

Ejemplo 5

Ambos objetos (Fila y Columna) se pueden convertir en data frames, así:

PorFila <- as.data.frame(PorFila); PorFila
##   V1 V2 V3 V4 V5
## A  1  2  3  4  5
## B  a  b  c  d  e
PorColumna <- as.data.frame(PorColumna); PorColumna
##   A B
## 1 1 a
## 2 2 b
## 3 3 c
## 4 4 d
## 5 5 e

4 Dividir data frames

4.0.1 Con la función split

Podemos considerar grupos de filas dividiendo el data frame según uno o más factores. En especial, esta función divide los datos en el data frame em grupos definidos por un factor.

Ejemplo 6

Consideremos el siguiente data frame:

A <- c("Masculino", "Femenino", "Masculino", "Masculino", "Femenino", "Masculino", "Femenino", "Masculino") 
B <- c("Alemania", "Alemania","Francia","Colombia","Colombia","Colombia","Francia","Colombia")
C <- c(4, 5, 8, 6, 10, 11, 4, 7)
df <- data.frame(Genero = A,  Paises=B, Total = C); df
##      Genero   Paises Total
## 1 Masculino Alemania     4
## 2  Femenino Alemania     5
## 3 Masculino  Francia     8
## 4 Masculino Colombia     6
## 5  Femenino Colombia    10
## 6 Masculino Colombia    11
## 7  Femenino  Francia     4
## 8 Masculino Colombia     7

Supongamos que queremos separarlo por género. Al aplicar la función split, obtenemos:

split(df, df$Genero)
## $Femenino
##     Genero   Paises Total
## 2 Femenino Alemania     5
## 5 Femenino Colombia    10
## 7 Femenino  Francia     4
## 
## $Masculino
##      Genero   Paises Total
## 1 Masculino Alemania     4
## 3 Masculino  Francia     8
## 4 Masculino Colombia     6
## 6 Masculino Colombia    11
## 8 Masculino Colombia     7

4.0.2 Con la función by

Un data frame se divide por fila en otros data frames que son subconjuntos definidos por los valores de uno o más factores, y una función FUN que se aplica, al mismo tiempo, a cada subconjunto. La función puede ser una operación aritmética, una mediada estadística, un gráfico, etc. La sintaxis básica es:

 by("dataframe", "factor o lista de factores", "función")

Ejemplo 7

Supongamos que se quiere obtener un resumen (summary) de los estadísticos básicos del Total y por género. Al aplicar la función by, obtenemos:

by(df[,3],list(df$Genero),summary)
## : Femenino
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   4.000   4.500   5.000   6.333   7.500  10.000 
## ------------------------------------------------------------ 
## : Masculino
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     4.0     6.0     7.0     7.2     8.0    11.0

Ejemplo 8

Podemos aplicar la función by para obtener un diagrama de caja y bigotes del Total y por género. Se deja al lector la visualización del resultado.

by(df[,3],list(df$Genero),boxplot)

4.0.3 Con aggregate

La función aggregate divide los datos en subconjuntos, calcula estadísticos de resumen para cada subconjunto y devuelve el resultado en un grupo por formulario. Es similar a la función by, pero la salida para el subgrupo es un solo resultado, en vez de una lista. Se escribe:

aggregate("dataframe", "factor o lista de factores", "función"). 

Ejemplo 9

Supongamos que se quiere agrupar por género y calcular la mediana del Total. Procedemos así (con names se cambian los nombres de las columnas):

Resultado <- aggregate(df[,3],by=list(df$Genero),median)
names(Resultado)[1] = "Género"
names(Resultado)[2] = "Mediana"
Resultado
##      Género Mediana
## 1  Femenino       5
## 2 Masculino       7

Ejemplo 10

Supongamos, ahora, que deseamos agrupar por Género y País (y calcular la mediana del Total):

Resultado <- aggregate(df[,3],by=list(df$Genero, df$Paises),sum) 
names(Resultado)[1] = "Género"
names(Resultado)[2] = "Paises"
names(Resultado)[3] = "Suma"
Resultado
##      Género   Paises Suma
## 1  Femenino Alemania    5
## 2 Masculino Alemania    4
## 3  Femenino Colombia   10
## 4 Masculino Colombia   24
## 5  Femenino  Francia    4
## 6 Masculino  Francia    8

5 Mezcla de data frames

La función merge nos permite unir dos data frames por columnas comunes o por nombres de fila, teniendo en cuenta una variable como clave que permite relacionar los casos de ambos. Para más detalles al respecto, puede consultarse el documento Rpubs :: Unir data frames con merge.

6 attach y detach

R guarda el nombre del data.frame pero no sus variables. Para poder utilizarlas con su nombre como vectores, podemos utilizar la función attach(nombre de data.frame). La operación inversa se realiza con la función detach(). En el caso de los data frames, es posible seleccionar las columnas deseadas, y crear con ellas otros data frame con las características deseadas. Para más detalles, puede consultarse el documento Rpubs :: Editando data frames.

Genero      #A) Sale el error: "objeto 'Genero' no encontrado"
attach(df)  #B) Sale el comentario: "The following objects are masked from df (pos = 3)"
Genero      #C) Ahora sí lee la variable.
detach(df)  #D) Para desactivar el "attach"
Genero      #E) Nuevamente, no lee la variable 'Genero'. 

7 Ejercicios

Crear un nuevo documento R Markdown, realizando las siguientes actividades. Construir ejemplos y aplicar la teoría explicada aquí.

Bibliografía

Consultar el documento RPubs :: Enlace y materiales de ayuda.

 

 
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.