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.Camion Juguete Excavadora De Grande Carro TlJFK1uc3

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.

Camion Juguete Excavadora De Grande Carro TlJFK1uc3

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"
												=
													Camion Juguete Excavadora De Grande Carro TlJFK1uc3
												
												c
												Camion Juguete Excavadora De Grande Carro TlJFK1uc3("a",
												"b",
												"c",
												"d"),
												"numero"
												=
												
												c(1.2,
												3.4,
												4.5,
												5.6),
												"cadena"
												=
												
												as.character(c
												Camion Juguete Excavadora De Grande Carro TlJFK1uc3("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
										Camion Juguete Excavadora De Grande Carro TlJFK1uc3
									
											
												# 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)
										
Cm Juguete Niño Gel Plástico 72 Francotirador Al Aire Hobby De Submáquina Pistola Bolas Y Para Libre Gratis Agua Barret q3RjL54A
										## [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
												Camion Juguete Excavadora De Grande Carro TlJFK1uc3(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(   VintageBizakCur Subasta Geyperman Y Action Man Lote Vendido En b6gf7y"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)
										
Camion Juguete Excavadora De Grande Carro TlJFK1uc3
										## [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"
													=
													
													cCamion Juguete Excavadora De Grande Carro TlJFK1uc3
													("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