Chapter 2 Marcos de datos y Tibbles
Cree estructuras de datos tabulares con marcos de datos y vea cómo se comparan con tibbles. Extraiga vectores de columna de marcos de datos para realizar cálculos. Obtenga información de metadatos como dimensiones. Seleccione las filas superior e inferior para obtener una descripción general rápida.
2.1 Construye un marco de datos a partir de vectores
Los datos tabulares son el formato más común utilizado por los científicos de datos. En R, las tablas se representan mediante marcos de datos. Pueden inspeccionarse imprimiéndolos en la consola.
- Comprender por qué los marcos de datos son importantes
- Interpretar la salida de la consola creada por un marco de datos
- Cree un nuevo marco de datos usando la función
data.frame()
- Definir los vectores que se utilizarán para columnas individuales
- Especificar los nombres de las columnas del marco de datos
data.frame(___ = ___,
___ = ___,
...)
2.1.1 Introducción a los marcos de datos
En análisis y estadísticas, los datos tabulares son la estructura de datos más importante. Está presente en muchos formatos comunes como archivos de Excel, valores separados por comas (CSV) o bases de datos. R integra objetos de datos tabulares como ciudadanos de primera clase en el idioma a través de marcos de datos. Los marcos de datos permiten a los usuarios leer y manipular fácilmente datos tabulares dentro del lenguaje R.
Echemos un vistazo a un objeto de marco de datos llamado Davis
, del paquete carData, que incluye medidas de altura y peso para 200 hombres y mujeres:
tibble (Davis)
## # A tibble: 200 x 5
## sex weight height repwt repht
## <fct> <int> <int> <int> <int>
## 1 M 77 182 77 180
## 2 F 58 161 51 159
## 3 F 53 161 54 158
## 4 M 68 177 70 175
## 5 F 59 157 59 155
## 6 M 76 170 76 165
## 7 M 76 167 77 165
## 8 M 69 186 73 180
## 9 M 71 178 71 175
## 10 M 65 171 64 170
## # … with 190 more rows
De la salida impresa, podemos ver que el marco de datos abarca más de 200 filas y 5 columnas. En el ejemplo anterior, cada fila contiene datos de una persona a través de atributos, que corresponden a las columnas sex
, weight
, height
, repwt
(peso reportado) y repht
(altura reportado).
Por ejemplo, la primera fila de la tabla especifica un hombre que pesa 77
kg y tiene una altura de 182
cm. Los pesos reportados están muy cerca de 77
kg y 180
cm, respectivamente.
Las filas en un marco de datos se identifican además por los nombres de fila a la izquierda, que son simplemente los números de fila por defecto. En el caso del conjunto de datos de Davis
anterior, los nombres de las filas van de 1 a 200.
2.1.2 Crear marcos de datos
data.frame(___ = ___,
___ = ___,
...)
Los marcos de datos contienen datos tabulares en varias columnas o atributos. Cada columna está representada por un vector de diferentes tipos de datos como números o caracteres. La función data.frame()
admite la construcción de objetos de marco de datos combinando diferentes vectores en una tabla. Para formar una tabla, se requiere que los vectores tengan la misma longitud. Un marco de datos también puede verse como una colección de vectores conectados entre sí para formar una tabla.
Creemos nuestro primer marco de datos con cuatro personas diferentes, incluidos sus identificadores, nombres e indicadores si son mujeres o no. Cada uno de estos atributos es creado por un vector diferente de diferentes tipos de datos (numéricos, de caracteres y lógicos). Los atributos finalmente se combinan en una tabla usando la función data.frame()
:
data.frame(
c(1, 2, 3, 4),
c("Louisa", "Jonathan", "Luigi", "Rachel"),
c(TRUE, FALSE, FALSE, TRUE)
)
## c.1..2..3..4. c..Louisa....Jonathan....Luigi....Rachel..
## 1 1 Louisa
## 2 2 Jonathan
## 3 3 Luigi
## 4 4 Rachel
## c.TRUE..FALSE..FALSE..TRUE.
## 1 TRUE
## 2 FALSE
## 3 FALSE
## 4 TRUE
El marco de datos resultante almacena los valores de cada vector en una columna diferente. Tiene cuatro filas y tres columnas. Sin embargo, los nombres de las columnas impresas en la primera línea parecen incluir los valores de las columnas separados por puntos, lo cual es un esquema de nombres muy extraño.
Los nombres de columna se pueden incluir en la construcción de data.frame()
como nombres de argumentos que preceden a los valores de los vectores de columna. Para mejorar el nombre de la columna del marco de datos anterior, podemos escribir
data.frame(
id = c(1, 2, 3, 4),
name = c("Louisa", "Jonathan", "Luigi", "Rachel"),
female = c(TRUE, FALSE, FALSE, TRUE)
)
## id name female
## 1 1 Louisa TRUE
## 2 2 Jonathan FALSE
## 3 3 Luigi FALSE
## 4 4 Rachel TRUE
El marco de datos resultante incluye los nombres de columna necesarios para ver el significado real de las diferentes columnas.
2.2 Crea y convierte tibbles
Tibbles son la reimaginación moderna de marcos de datos y comparten muchos puntos en común con sus antepasados. La diferencia más visible es cómo se imprime el contenido de tibble en la consola. Tibbles son parte del tidyverse y se utilizan por su comportamiento más consistente en comparación con los marcos de datos.
- Conozca la diferencia entre marcos de datos y tibbles
- Crear tibbles a partir de vectores
- Convertir marcos de datos en tibbles
tibble(___ = ___,
___ = ___,
...)
as_tibble(___)
2.2.1 Introducción a Tibbles
Una reinvención moderna del marco de datos https://tibble.tidyverse.org
Tibbles son en muchos aspectos similares a los marcos de datos. De hecho, se heredan de los marcos de datos, lo que significa que todas las funciones y características disponibles para los marcos de datos también funcionan para tibbles. Por tanto, cuando hablamos de marcos de datos también nos referimos a tibbles.
Además de todo lo que ofrece un marco de datos, los tibbles tienen un comportamiento más consistente con una mejor usabilidad en muchos casos. Lo más importante es que cuando se imprime un objeto tibble en la consola, muestra automáticamente solo las primeras 10 filas y condensa columnas adicionales. Por el contrario, un marco de datos llena toda la pantalla de la consola con valores que pueden generar confusión. Echemos un vistazo al conjunto de datos gapminder
del paquete gapminder:
::gapminder gapminder
## # A tibble: 1,704 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
## 7 Afghanistan Asia 1982 39.9 12881816 978.
## 8 Afghanistan Asia 1987 40.8 13867957 852.
## 9 Afghanistan Asia 1992 41.7 16317921 649.
## 10 Afghanistan Asia 1997 41.8 22227415 635.
## # … with 1,694 more rows
Inmediatamente vemos que el conjunto de datos gapminder
es un tibble que consta de 1,704 filas y 6 columnas en la línea superior. En la segunda línea podemos ver los nombres de las columnas y sus correspondientes tipos de datos directamente debajo.
Por ejemplo, la columna country
tiene el tipo <fct>
(que es la abreviatura de “factor”), year
es un número entero <int>
y la esperanza de vida lifeExp
es un <dbl>
, un número decimal.
2.2.2 Creando Tibbles
tibble(___ = ___,
___ = ___,
...)
as_tibble(___)
La creación de tibbles funciona exactamente igual que para los marcos de datos. Podemos usar la función tibble()
del paquete tibble para crear un nuevo objeto tabular.
Por ejemplo, un tibble que contenga datos de cuatro personas diferentes y tres columnas se puede crear así:
library(tibble)
tibble(
id = c(1, 2, 3, 4),
name = c("Louisa", "Jonathan", "Luigi", "Rachel"),
female = c(TRUE, FALSE, FALSE, TRUE)
)
## # A tibble: 4 x 3
## id name female
## <dbl> <chr> <lgl>
## 1 1 Louisa TRUE
## 2 2 Jonathan FALSE
## 3 3 Luigi FALSE
## 4 4 Rachel TRUE
2.2.3 Conversión de marcos de datos a Tibbles
Si prefiere tibbles a marcos de datos por sus características adicionales, también se pueden convertir a partir de marcos de datos existentes con la función as_tibble()
.
Por ejemplo, el marco de datos de Davis
del paquete carData se puede convertir a un tibble así:
as_tibble(Davis)
## # A tibble: 200 x 5
## sex weight height repwt repht
## <fct> <int> <int> <int> <int>
## 1 M 77 182 77 180
## 2 F 58 161 51 159
## 3 F 53 161 54 158
## 4 M 68 177 70 175
## 5 F 59 157 59 155
## 6 M 76 170 76 165
## 7 M 76 167 77 165
## 8 M 69 186 73 180
## 9 M 71 178 71 175
## 10 M 65 171 64 170
## # … with 190 more rows
2.3 Extraiga o reemplace columnas en un marco de datos usando $
Las columnas de un marco de datos se pueden extraer y manipular fácilmente con el operador $
. Incluso se pueden agregar nuevas columnas asignando un vector.
- Extraiga columnas de un marco de datos con
$
. - Reemplazar valores de columnas existentes en un marco de datos.
- Agregue nuevas columnas a un marco de datos.
___$___
___$___ <- ___
2.3.1 Extraer columnas con $
Los marcos de datos son tablas que resultan de la combinación de vectores de columna. Los usuarios pueden interactuar con los marcos de datos a través de numerosos operadores para extraer, agregar o recombinar valores. Para extraer columnas individuales de un marco de datos, R ofrece un operador muy específico: el dólar $
. Devuelve el vector de columna como lo indica su nombre basado en un marco de datos que precede a $
.
Para ver el operador $
en acción, extraigamos la población pop
(en 1,000) de diferentes estados de los EE. UU. Según el conjunto de datos de los estados (de 1992) en el paquete carData:
::States$pop carData
## [1] 4041 550 3665 2351 29760 3294 3287 666 607 12938 6478 1108
## [13] 1007 11431 5544 2777 2478 3685 4220 1228 4781 6016 9295 4375
## [25] 2573 5117 799 1578 1202 1109 7730 1515 17990 6629 639 10847
## [37] 3146 2842 11882 1003 3487 696 4877 16987 1723 563 6187 4867
## [49] 1793 4892 454
El comando extrae la columna de población como vector del marco de datos. A partir de este vector podemos calcular la sum()
de la población total como:
sum(States$pop)
## [1] 248709
De manera similar, el salario promedio (en $1,000) de los maestros se puede calcular como la mean()
de la columna pay
:
mean(States$pay)
## [1] 30.94118
2.4 Determinar el tamaño de un marco de datos
El tamaño de un marco de datos, como el número de filas o columnas, a menudo es necesario y se puede determinar de varias formas.
- Obtener el número de filas de un marco de datos
- Obtener el número de columnas de un marco de datos
- Obtener dimensiones de un marco de datos
nrow(___)
ncol(___)
dim(___)
length(___)
2.4.1 Dimensiones del marco de datos
El número de filas y columnas en un marco de datos se puede adivinar a través de la salida impresa del marco de datos. Sin embargo, es mucho más fácil obtener esta información directamente a través de funciones. Además, es posible que desee utilizar esta información en algunas partes del código.
Los marcos de datos tienen dos dimensiones. El número de filas se considera la primera dimensión. Por lo general, define el número de observaciones en un conjunto de datos. Para obtener el número de filas del marco de datos de Davis
en el conjunto de datos carData, use la función nrow()
:
nrow(Davis)
## [1] 200
De manera similar, el número de columnas o atributos del marco de datos se puede recuperar con ncol()
:
ncol(Davis)
## [1] 5
2.4.2 Recuperar las dimensiones del marco de datos
Para recuperar el tamaño de todas las dimensiones de un marco de datos a la vez, puede usar la función dim()
. dim()
devuelve un vector con dos elementos, el primer elemento es el número de filas y el segundo elemento el número de columnas.
Por ejemplo, las dimensiones del conjunto de datos de Davis
se pueden recuperar como:
dim(Davis)
## [1] 200 5
Además de los marcos de datos, dim()
también se puede utilizar para otros objetos R multidimensionales, como matrices. Sin embargo, cuando se usa con vectores dim
solo devuelve NULL
:
dim(c(1, 3, 5, 7))
## NULL
En cambio, la longitud de un vector se determina mediante length()
:
length(c(1, 3, 5, 7))
## [1] 4
En el caso de un marco de datos, length()
devuelve su número de columnas:
length(Davis)
## [1] 5
2.5 Seleccionar la primera o la última fila de un marco de datos
A menudo no necesitamos mirar todo el contenido de un marco de datos en la consola. En cambio, solo algunas partes son suficientes, como la parte superior o inferior recuperada a través de las funciones head()
y tail()
.
- Seleccionar la parte superior de un marco de datos
- Seleccione la parte inferior de un marco de datos
- Especifique el número de líneas a seleccionar mediante el parámetro n
head(___, n = ___)
tail(___, n = ___)
2.5.1 Seleccionar la parte superior de un marco de datos
Los marcos de datos pueden abarcar una gran cantidad de filas y columnas. Según la salida impresa en la consola, puede ser difícil obtener una impresión inicial de los datos dentro del marco de datos. Este problema no es tanto un problema para tibbles que tienen una mejor salida de consola. Además, puede ser útil recuperar fácilmente las primeras filas en un comando sin indexación ni paquetes adicionales.
El conjunto de datos TitanicSurvival
contiene datos de 1309 pasajeros representados como filas. Una simple impresión del conjunto de datos imprimiría a todos los pasajeros, llenando toda la consola. En cambio, la función head()
muestra solo las primeras 10 filas de un marco de datos, incluidos los nombres de sus columnas:
head(TitanicSurvival)
## survived sex age passengerClass
## Allen, Miss. Elisabeth Walton yes female 29.0000 1st
## Allison, Master. Hudson Trevor yes male 0.9167 1st
## Allison, Miss. Helen Loraine no female 2.0000 1st
## Allison, Mr. Hudson Joshua Crei no male 30.0000 1st
## Allison, Mrs. Hudson J C (Bessi no female 25.0000 1st
## Anderson, Mr. Harry yes male 48.0000 1st
El número de columnas se puede ajustar mediante el parámetro n
. Para extraer solo las primeras tres filas del conjunto de datos, puede escribir:
head(TitanicSurvival, n = 3)
## survived sex age passengerClass
## Allen, Miss. Elisabeth Walton yes female 29.0000 1st
## Allison, Master. Hudson Trevor yes male 0.9167 1st
## Allison, Miss. Helen Loraine no female 2.0000 1st
2.5.2 Seleccionar la parte inferior de un marco de datos
La función tail()
se puede utilizar para seleccionar las filas inferiores de un marco de datos. Similar a la función head()
, también acepta un parámetro n
para especificar el número de filas que se devolverán.
Por ejemplo, para seleccionar las últimas cinco filas del conjunto de datos TitanicSurvival
, puede escribir:
tail(TitanicSurvival, n = 5)
## survived sex age passengerClass
## Zabour, Miss. Hileni no female 14.5 3rd
## Zabour, Miss. Thamine no female NA 3rd
## Zakarian, Mr. Mapriededer no male 26.5 3rd
## Zakarian, Mr. Ortin no male 27.0 3rd
## Zimmerman, Mr. Leo no male 29.0 3rd
Las funciones de cabeza y cola también se pueden combinar para seleccionar un fragmento del conjunto de datos del medio. Para seleccionar las primeras cinco filas de las 500 filas inferiores, puede escribir:
head(tail(TitanicSurvival, n = 500), n = 5)
## survived sex age passengerClass
## Ford, Mr. Edward Watson no male 18 3rd
## Ford, Mr. William Neal no male 16 3rd
## Ford, Mrs. Edward (Margaret Ann no female 48 3rd
## Fox, Mr. Patrick no male NA 3rd
## Franklin, Mr. Charles (Charles no male NA 3rd