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.Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k

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.

Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k

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"
												=
													Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k
												
												c
												Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k("a",
												"b",
												"c",
												"d"),
												"numero"
												=
												
												c(1.2,
												3.4,
												4.5,
												5.6),
												"cadena"
												=
												
												as.character(c
												Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k("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
										Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k
									
											
												# 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)
										
Alta Animales Muebles Retro Resina País Calidad Antigua De Americano Hogar Villa Decoración MSzqpUV
										## [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
												Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k(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(   Libre Colombia Mercado Gourmet Juguetes Chocolateria Mi Alegria En dxoCeWQBEr"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)
										
Omega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k
										## [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"
													=
													
													cOmega Juguete Bootleg Skin Fortnite Figura OnwN0XP8k
													("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