6  Laboratorio de R 4

En este laboratorio de R se abordará el manejo de estructuras de datos. En R podemos encontrar distintas estructuras de datos, es decir enR se pueden encontrar datos ordenados de distintas formas. Además, muchas veces es de nuestro interés acceder a datos en especifico, manipular las estructuras o crear subsets con características peculiares.

De acuerdo con su grado de complejidad las estructuras de datos en R son:

6.1 Vectores

Tienen una dimensión y solo tienen un tipo de dato, por ejemplo solamente datos numéricos.

El siguiente código crea un vector numérico.

Vector_Numerico <- c(1,2,3,4,5,6,7,8,9)

Si prestamos atención el vector anterior solo tiene una dimensión y solo tiene valores numéricos.

Vector_Numerico
[1] 1 2 3 4 5 6 7 8 9

Otro ejemplo se muestra en el siguiente código es un vector con caracteres (cadenas).

Vector_Cadena <- c("Curso", "Proinnova", "tarea")

Si llamamos al objeto obtenemos lo siguiente:

Vector_Cadena
[1] "Curso"     "Proinnova" "tarea"    

Se pueden combinar los dos vectores anteriores pero R realizará una coerción de los datos. Puede ver más sobre la coerción de datos en el apartado [Coerción de datos] y en el siguiente en el siguiente blog

Vector <- c(Vector_Numerico, Vector_Cadena)

Si comprobamos el tipo de dato que contiene el Vector veremos que lo transformó a cadena.

class(Vector)
[1] "character"

6.2 Matrices

Son estructuras de dos dimensiones que contienen solo un tipo de dato (numérico, cadena, etc.). Las dimensiones en una matriz se caracterizan por tener un largo (dimensión 1) y un alto (dimensión 2). Las matrices son, por lo tanto, una estructura con forma rectangular, con renglones y columnas en las que solamente hay un tipo de dato.

6.3 Data Frame

Los Data Frames o marco de datos, es una estructura muy parecida a las matrices, sin embargo, a diferencia de las matrices pueden contener varios de tipos de datos en dos dimensiones. Un Data Frame es una estructura de datos que organiza los datos en una tabla bidimensional de filas y columnas, como una hoja de cálculo o una base de datos. La base de datos birwht es un Data Frame Tabla 6.1.

Tabla 6.1: Ejemplo de un Data Frame
function (x, df1, df2, ncp, log = FALSE)
{
if (missing(ncp))
.Call(C_df, x, df1, df2, log)
else .Call(C_dnf, x, df1, df2, ncp, log)
}

Los Data Frame son una de las estructuras de datos más comunes utilizadas en el análisis de datos, ciencias de datos, bioestadística. Es la forma más intuitiva de almacenar y trabajar con datos. Es muy fácil, almacenar los datos en una hoja de cálculo. En un Data Frame los renglones tienen los casos, mientras que las columnas tienen las variables. Por ejemplo en la base de datos birtwht (ver tabla Tabla 6.1), en los renglones o filas se encuentran cada una de las pacientes y en las columnas cada una de las variables (por ejemplo, glu, BMI).

6.4 Subconjuntos de datos

En este apartado se describirá como acceder a datos que tienen características específicas dentro de un data frame. Para ello, vamos a trabajar con la base de datos Vacunacion que se describe a continuación:

6.4.1 Data frame Vacunacion

El data frame Vacunacion es un archivo con extensión .xlxs que contiene los datos acumulados de vacunación hasta el 31 de diciembre de 2021 por países y regiones para el COVID-19. Los datos fueron extraídos del repositorio Our World in Data en GitHub para covid-19. El data frame cuenta con las siguiente variables:

  • location: Que indica la región de la que fueron obtenidos los datos
  • date: Fecha
  • vaccine: Inidca el tipo de vacuna
  • total_vaccinations: Indica el total acumulado para cada vacuna en específico.

Utilice en el menú de Rstudio (ver apartado [Exportar base de datos desde el menu de Rstudio]) para importar la base de datos. Recuerde que se trata de un archivo con extensión .xlxs. Puede descargar el Data Frame en el siguiente en este enlace

Por favor nombre su base de datos como “Vacunacion”. Recuerde que este será nuestro mega objeto al que necesitamos acceder. Puede utilizar la función View para visualizar su Data Frame

Tabla 6.2: Vista general del Data Frame Vacunación
location date vaccine total_vaccinations
Argentina 2021-12-31 CanSino 204112
Argentina 2021-12-31 Moderna 3539575
Argentina 2021-12-31 Oxford/AstraZeneca 24446207
Argentina 2021-12-31 Pfizer/BioNTech 6122911
Argentina 2021-12-31 Sinopharm/Beijing 25539384
Argentina 2021-12-31 Sputnik V 18238358
Austria 2021-12-31 Johnson&Johnson 360436
Austria 2021-12-31 Moderna 1483121
Austria 2021-12-31 Novavax 0
Austria 2021-12-31 Oxford/AstraZeneca 1588102
Austria 2021-12-31 Pfizer/BioNTech 13129584
Belgium 2021-12-31 Johnson&Johnson 423883

6.4.2 ¿Cómo acceder a un subconjunto de datos?

Para acceder a los subconjuntos de datos o algún dato en específico podemos hacerlo utilizando los símbolos [] y el símbolo $.

6.4.2.1 Subconjuntos de datos con []

A continuación se explican algunos ejemplos utilizando corchetes.

Supongamos que deseamos conocer cual es el dato que se ubica en la fila de 7 y en la columna 4. Para ello, podemos utilizar el siguiente código que devolverá precisamente este dato:

Vacunacion[7,4]
# A tibble: 1 × 1
  total_vaccinations
               <dbl>
1             360436

Este dato corresponde a la cantidad de individuos vacunados con la vacuna Johnson&Johnson en Austria. Note como el primer número indica la fila y el segundo la columna.

Ahora suponga que desea conocer cuantas veces aparece cada uno de los países y regiones. Para ello, nos vamos a poyar de la función table utilizando el siguiente código

table(Vacunacion[,1])
location
     Argentina        Austria        Belgium       Bulgaria          Chile 
             6              5              5              4              4 
       Croatia         Cyprus        Czechia        Denmark        Ecuador 
             4              4              3              4              4 
       Estonia European Union        Finland         France        Germany 
             4              9              4              4              5 
     Hong Kong        Hungary        Ireland          Italy         Latvia 
             2              6              3              3              3 
 Liechtenstein      Lithuania     Luxembourg          Malta    Netherlands 
             3              4              4              4              5 
        Norway           Peru         Poland       Portugal        Romania 
             4              3              5              6              4 
      Slovakia       Slovenia    South Korea          Spain         Sweden 
             3              4              5              4              4 
   Switzerland        Ukraine        Uruguay 
             3              5              3 

Note como dejamos el número de las filas vacío y pusimos el número 1 en las columnas. Este código indica que queremos los conteos de la primer columna tomando en cuenta todas la filas. Si por ejemplo, quisiéramos los conteos de las primeras 50 filas, el código sería el siguiente:

table(Vacunacion[1:50, 1])
location
Argentina   Austria   Belgium  Bulgaria     Chile   Croatia    Cyprus   Czechia 
        6         5         5         4         4         4         4         3 
  Denmark   Ecuador   Estonia   Finland 
        4         4         4         3 

Si no conoce el número de la fila o la columna puede utilizar su nombre, siempre y cuando se encuentre entrecomillado

table(Vacunacion[1:50, "location"])
location
Argentina   Austria   Belgium  Bulgaria     Chile   Croatia    Cyprus   Czechia 
        6         5         5         4         4         4         4         3 
  Denmark   Ecuador   Estonia   Finland 
        4         4         4         3 

6.4.2.2 Subconjuntos de datos con $

Otra forma de acceder a los subconjuntos de datos es utilizando el símbolo de $. Por ejemplo, supongamos que deseamos conocer cuantas veces aparece cada uno de los países y regiones utilizando la función table. Para ello empleamos el siguiente código:

table(Vacunacion$location)

     Argentina        Austria        Belgium       Bulgaria          Chile 
             6              5              5              4              4 
       Croatia         Cyprus        Czechia        Denmark        Ecuador 
             4              4              3              4              4 
       Estonia European Union        Finland         France        Germany 
             4              9              4              4              5 
     Hong Kong        Hungary        Ireland          Italy         Latvia 
             2              6              3              3              3 
 Liechtenstein      Lithuania     Luxembourg          Malta    Netherlands 
             3              4              4              4              5 
        Norway           Peru         Poland       Portugal        Romania 
             4              3              5              6              4 
      Slovakia       Slovenia    South Korea          Spain         Sweden 
             3              4              5              4              4 
   Switzerland        Ukraine        Uruguay 
             3              5              3 

Note como el símbolo $ nos ayuda acceder a los objetos contenidos en nuestro mega objeto (data frame). Hasta cierto punto esto nos puede ayudar a sustituir la función attach.

Se pueden combinar el uso de [], $ y el uso de operadores relacionales, para acceder a datos en específico. Por ejemplo, suponga que deseamos filtrar la cantidad de individuos vacunados de Bélgica. Para ello empleamos el siguiente código:

Vacunacion$total_vaccinations[Vacunacion$location=="Belgium"]
[1]   423883  2346032        0  2846647 16078523

La explicación del código es la siguiente: Primero accedimos a la columna de total de vacunación. Posteriormente, dado que es de nuestro interés seleccionar solamente los datos de Bélgica, filtramos utilizando los [] para acceder a la columna location que a su vez filtramos utilizando los operadores lógicos para seleccionar los datos únicamente de aquello que en la columna location es exactamente igual a Belgium. Note como se utilizaron comillas y un signo de doble igual.

6.5 Ejercicios R lab 04

Utilizando la base de datos de vacunación responda los siguientes ejercicios:

Ejercicio 6.1 Identifique cual es el dato que se encuentra en la fila 50 y columna 3

Vacunacion[50,3]
# A tibble: 1 × 1
  vaccine           
  <chr>             
1 Oxford/AstraZeneca

Ejercicio 6.2 Identifique cual es el dato que se encuentra en la fila 98 y columna 2

Vacunacion[98,2]
# A tibble: 1 × 1
  date               
  <dttm>             
1 2021-12-31 00:00:00

Ejercicio 6.3 Si quisiéramos acceder a toda la columna 3 ¿Cuál sería el código que debería utilizarse? ¿Hay solo una opción?

table(Vacunacion[,3])
vaccine
           CanSino            Covaxin    Johnson&Johnson            Moderna 
                 3                  1                 31                 33 
           Novavax Oxford/AstraZeneca    Pfizer/BioNTech  Sinopharm/Beijing 
                 8                 30                 38                  5 
           Sinovac          Sputnik V 
                 7                  3 
# Para facilitar la visualización se utilizó la función table

Ejercicio 6.4 Suponga que solamente le interesan los datos contenidos en las filas 4 a la 10. ¿Qué código necesita para ello?

Vacunacion[4:10,]
# A tibble: 7 × 4
  location  date                vaccine            total_vaccinations
  <chr>     <dttm>              <chr>                           <dbl>
1 Argentina 2021-12-31 00:00:00 Pfizer/BioNTech               6122911
2 Argentina 2021-12-31 00:00:00 Sinopharm/Beijing            25539384
3 Argentina 2021-12-31 00:00:00 Sputnik V                    18238358
4 Austria   2021-12-31 00:00:00 Johnson&Johnson                360436
5 Austria   2021-12-31 00:00:00 Moderna                       1483121
6 Austria   2021-12-31 00:00:00 Novavax                             0
7 Austria   2021-12-31 00:00:00 Oxford/AstraZeneca            1588102

Ejercicio 6.5 Acceda al total de individuos vacunados solamente a los datos de vacunación para Slovakia.

Vacunacion$total_vaccinations[Vacunacion$location=="Slovakia"]
[1]  166933  609618 4497296

Ejercicio 6.6 Calcule el total de individuos vacunados en Slovakia. Puede utilizar la función sum o realizar la suma manualmente.

sum(Vacunacion$total_vaccinations[Vacunacion$location=="Slovakia"])
[1] 5273847

La función sum() en R se utiliza para calcular la suma de los valores de un vector o una secuencia de números. Puede utilizar esta función para encontrar la suma de todos los elementos en un vector numérico

Ejercicio 6.7 Acceda al total de los individuos vacunados en Lithuania y Germany.

Vacunacion$total_vaccinations[Vacunacion$location=="Lithuania"|Vacunacion$location=="Germany"]
[1]   3585910  22632260         0  12745990 111319595    281798    304289
[8]    536426   2997629

Ejercicio 6.8 Cree un nuevo objeto con que contenga todas las columnas del data frame vacunación pero que solo contenga las filas de Lithuania. Llame a este objeto como Lithuania

Lithuania <- Vacunacion[Vacunacion$location=="Lithuania", ]
Lithuania
# A tibble: 4 × 4
  location  date                vaccine            total_vaccinations
  <chr>     <dttm>              <chr>                           <dbl>
1 Lithuania 2021-12-31 00:00:00 Johnson&Johnson                281798
2 Lithuania 2021-12-31 00:00:00 Moderna                        304289
3 Lithuania 2021-12-31 00:00:00 Oxford/AstraZeneca             536426
4 Lithuania 2021-12-31 00:00:00 Pfizer/BioNTech               2997629