6.3 Data frames

Los data frames son estructuras de datos de dos dimensiones (rectangulares) que pueden contener datos de diferentes tipos, por lo tanto, son heterogéneas. Esta estructura de datos es la más usada para realizar análisis de datos y seguro te resultará familiar si has trabajado con otros paquetes estadísticos.

Podemos entender a los data frames como una versión más flexible de una matriz. Mientras que en una matriz todas las celdas deben contener datos del mismo tipo, los renglones de un data frame admiten datos de distintos tipos, pero sus columnas conservan la restricción de contener datos de un sólo tipo.Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80

En términos generales, los renglones en un data frame representan casos, individuos u observaciones, mientras que las columnas representan atributos, rasgos o variables. Por ejemplo, así lucen los primeros cinco renglones del objeto iris, el famoso conjunto de datos Iris de Ronald Fisher, que está incluido en todas las instalaciones de R.

										##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species ## 1          5.1         3.5          1.4         0.2  setosa ## 2          4.9         3.0          1.4         0.2  setosa ## 3          4.7         3.2          1.3         0.2  setosa ## 4          4.6         3.1          1.5         0.2  setosa ## 5          5.0         3.6          1.4         0.2  setosa
									

Los primeros cinco renglones corresponden a cinco casos, en este caso flores. Las columnas son variables con los rasgos de cada flor: largo y ancho de sépalo, largo y ancho de pétalo, y especie.

Para crear un data frame usamos la función data.frame(). Esta función nos pedirá un número de vectores igual al número de columnas que deseemos. Todos los vectores que proporcionemos deben tener el mismo largo.

Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80

Esto es muy importante: Un data frame está compuesto por vectores.

Más adelante se hará evidente porque esta característica de un data frame es sumamente importante y también, cómo podemos sacarle provecho.

Además, podemos asignar un nombre a cada vector, que se convertirá en el nombre de la columna. Como todos los nombres, es recomendable que este sea claro, no ambiguo y descriptivo.

											mi_df <-
												
												data.frame(
												"entero"
												=
												
												1
												:
												4,
												"factor"
												=
													Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80
												
												c
												Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80("a",
												"b",
												"c",
												"d"),
												"numero"
												=
												
												c(1.2,
												3.4,
												4.5,
												5.6),
												"cadena"
												=
												
												as.character(c
												Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80("a",
												"b",
												"c",
												"d")) )  mi_df
										
										##   entero factor numero cadena ## 1      1      a    1.2      a ## 2      2      b    3.4      b ## 3      3      c    4.5      c ## 4      4      d    5.6      d
										Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80
									
											
												# Podemos usar dim() en un data frame
												dim(mi_df)
										
										## [1] 4 4
									
											
												# El largo de un data frame es igual a su número de columnas
												length(mi_df)
										
Bruder Pala Cat Tractor Con Excavadora xoeCrBWd
										## [1] 4
									
											
												# names() nos permite ver los nombres de las columnas
												names(mi_df)
										
										## [1] "entero" "factor" "numero" "cadena"
									
											
												# La clase de un data frame es data.frame
												class
												Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80(data.frame)
											
										
										## [1] "function"
									

Si los vectores que usamos para construir el data frame no son del mismo largo, los datos no se reciclaran. Se nos devolverá un error.

											
												data.frame(   2 Para Fundas Con Sofá Bolsillo Fityle Impermeables Interior PknwOX0ZN8"entero"
												=
												
												1
												:
												3,
												"factor"
												=
												
												c("a",
												"b",
												"c",
												"d"),
												"numero"
												=
												
												c(1.2,
												3.4,
												4.5,
												5.6),
												"cadena"
												=
												
												as.character(c("a",
												"b",
												"c",
												"d")) )
										
										## Error in data.frame(entero = 1:3, factor = c("a", "b", "c", "d"), numero = c(1.2, : arguments imply differing number of rows: 3, 4
									

También podemos coercionar esta matriz a un data frame.

Creamos una matriz.

											matriz <-
												matrix(1
												:
												12,
												ncol =
												4)
										

Usamos as.data.frame() para coercionar una matriz a un data frame.

											df <-
												
												as.data.frame(matriz)
										

Verificamos el resultado

											
												class(df)
										
Marinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80
										## [1] "data.frame"
									
											
												# Resultado
												df
										
										##   V1 V2 V3 V4 ## 1  1  4  7 10 ## 2  2  5  8 11 ## 3  3  6  9 12
									

6.3.1 Propiedades de un data frame

Al igual que con una matriz, si aplicamos una operación aritmética a un data frame, esta se vectorizará.

Los resultados que obtendremos dependerán del tipo de datos de cada columna. R nos devolverá todas las advertencias que ocurran como resultado de las operaciones realizadas, por ejemplo, aquellas que hayan requerido una coerción.

												mi_df <-
													
													data.frame(
													"entero"
													=
													
													1
													:
													4,
													"factor"
													=
													
													cMarinette Marinette Miraculous Muñeca Juguetes Muñeca Muñeca Juguetes Miraculous Miraculous Marinette 39745Mcktoys 39745Mcktoys nwmN80
													("a",
													"b",
													"c", "d"),
													"numero"
													=
													
													c(1.2,
													3.4,
													4.5,
													5.6),
													"cadena"
													=
													
													as.character(c("a",
													"b",
													"c",
													"d")) )  mi_df
													*
													
													
													2
												
											
											## Warning in Ops.factor(left, right): '*' not meaningful for factors  ## Warning in Ops.factor(left, right): '*' not meaningful for factors
										
											##   entero factor numero cadena ## 1      2     NA    2.4     NA ## 2      4     NA    6.8     NA ## 3      6     NA    9.0     NA ## 4      8     NA   11.2     NA