En nuestra asignatura vamos a trabajar con el universo \(\texttt{tidyverse}\) de \(\texttt{R}\). Éste se trata de un paquete que contiene muchos otros paquetes que mejoran notablemente el análisis y visualización de datos, principalmente cuando tienen grandes dimensiones. Por ello, es necesario instalar ese paquete y a continuación cargarlo.

if(!("tidyverse" %in% install.packages())) install.packages("tidyverse")
library(tidyverse); library(datos)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.5.1     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.1
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

La estructura de datos \(\texttt{Tibbles}\) es una estructura que mejora a los \(\texttt{data.frame}\). Pueden crearse con la función \(\texttt{tibble()}\) (con el mismo formato que \(\texttt{data.frame}\)) o bien con la función \(\texttt{as_tibble()}\).

data <- datos::atmosfera #se puede acceder al conjunto de datos "atmosfera" del paquete "datos"
data <- as_tibble(data)

Este tipo de datos permite concatenar órdenes, gracias al paquete \(\texttt{tidyverse}\) empleando\(\texttt{%>%}\), por ejemplo:

data %>% 
  summarise(mean=mean(longitud))
## # A tibble: 1 × 1
##    mean
##   <dbl>
## 1   -85

Para saber qué hace la función \(\texttt{summarise()}\) podemos encontrar la siguiente orden:

?summarise 

Podemos extraer valores del mismo modo que en \(\texttt{data.frame}\), pero existe otra manera también útil:

#Se muestran las 5 primeras filas para la variable latitud
data$latitud[1:5]
## [1] 36.20000 33.70435 31.20870 28.71304 26.21739
data[1:5,] %>% 
  .$latitud 
## [1] 36.20000 33.70435 31.20870 28.71304 26.21739

Preparación de datos

Un conjunto de datos adecuado, esto es, ordenado, debe cumplir las siguientes tres reglas: * Cada variable debe tener su propia columna. * Cada observación debe tener su propia fila. * Cada valor debe tener su propia celda.

Sin embargo, puede ocurrir que esto no se cumpla, por lo que habrá que preparar los datos previamente.

1. Una variable se extiende por varias columnas.

Se dispone de un conjunto de datos en formato largo, esto es, las columnas representan los valores de una variable. Por ejemplo,

tabla4a
## # A tibble: 3 × 3
##   pais       `1999` `2000`
##   <chr>       <dbl>  <dbl>
## 1 Afganistán    745   2666
## 2 Brasil      37737  80488
## 3 China      212258 213766

En ella se puede observar que para cada país disponemos de dos valores de la misma variable (uno para el año 1999 y otro valor para el año 2000), luego realmente los nombres de las columnas ‘1999’ y ‘2000’ son valores de la variable año. Por tanto, es necesario construir un conjunto de datos ordenados con la función \(\texttt{pivot_longer()}\):

tabla4a %>% 
  pivot_longer(cols=c('1999','2000'),#nombre de las columnas que se pasan a valores de una variable
               names_to="agno",#nombre de la variable creada para los valores anteriores
               values_to="valores")#nombre de la variable donde se situarán los valores
## # A tibble: 6 × 3
##   pais       agno  valores
##   <chr>      <chr>   <dbl>
## 1 Afganistán 1999      745
## 2 Afganistán 2000     2666
## 3 Brasil     1999    37737
## 4 Brasil     2000    80488
## 5 China      1999   212258
## 6 China      2000   213766

2. Una observación está dispersa entre múltiples filas.

Se dispone de un conjunto de datos en formato corto, esto es, una observación aparece en múltiples filas. Por ejemplo,

tabla2
## # A tibble: 12 × 4
##    pais        anio tipo          cuenta
##    <chr>      <dbl> <chr>          <dbl>
##  1 Afganistán  1999 casos            745
##  2 Afganistán  1999 población   19987071
##  3 Afganistán  2000 casos           2666
##  4 Afganistán  2000 población   20595360
##  5 Brasil      1999 casos          37737
##  6 Brasil      1999 población  172006362
##  7 Brasil      2000 casos          80488
##  8 Brasil      2000 población  174504898
##  9 China       1999 casos         212258
## 10 China       1999 población 1272915272
## 11 China       2000 casos         213766
## 12 China       2000 población 1280428583

En ella se puede observar que para cada país disponemos de 4 filas, pues se tiene una fila para el año 1999 y otra para el año 2000, tanto para la variable casos como para la variable población, y una última columna donde se sitúan los valores. Por tanto, nos interesa tener para cada país y año, una variable para casos y otra para población. Esto se hace mediante la función \(\texttt{pivot_wider()}\):

tabla2 %>% 
  pivot_wider(names_from=tipo, #nombre de la variable que va a proporcionar las nuevas variables
              values_from=cuenta) #nombre de la variable que representa los valores
## # A tibble: 6 × 4
##   pais        anio  casos  población
##   <chr>      <dbl>  <dbl>      <dbl>
## 1 Afganistán  1999    745   19987071
## 2 Afganistán  2000   2666   20595360
## 3 Brasil      1999  37737  172006362
## 4 Brasil      2000  80488  174504898
## 5 China       1999 212258 1272915272
## 6 China       2000 213766 1280428583

Funciones útiles

data %>% 
  glimpse()
## Rows: 41,472
## Columns: 11
## $ latitud         <dbl> 36.200000, 33.704348, 31.208696, 28.713043, 26.217391,…
## $ longitud        <dbl> -113.8000, -113.8000, -113.8000, -113.8000, -113.8000,…
## $ anio            <int> 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, …
## $ mes             <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ temp_superficie <dbl> 272.7, 279.5, 284.7, 289.3, 292.2, 294.1, 295.0, 298.3…
## $ temperatura     <dbl> 272.1, 282.2, 285.2, 290.7, 292.7, 293.6, 294.6, 296.9…
## $ presion         <dbl> 835, 940, 960, 990, 1000, 1000, 1000, 1000, 1000, 1000…
## $ ozono           <dbl> 304, 304, 298, 276, 274, 264, 258, 252, 250, 250, 248,…
## $ nube_baja       <dbl> 7.5, 11.5, 16.5, 20.5, 26.0, 30.0, 29.5, 26.5, 27.5, 2…
## $ nube_media      <dbl> 34.5, 32.5, 26.0, 14.5, 10.5, 9.5, 11.0, 17.5, 18.5, 1…
## $ nube_alta       <dbl> 26.0, 20.0, 16.0, 13.0, 7.5, 8.0, 14.5, 19.5, 22.5, 21…
#Selecciona las filas cuya variable mes es igual 1 o igual a 12
data %>% 
  filter((mes==1)|(mes==12)) 
## # A tibble: 6,912 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 6,902 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Selecciona las filas cuya variable anio es mayor que 1995 y menor que 1998
data %>% 
  filter((anio>1995)&(anio<1998)) 
## # A tibble: 13,824 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1996     1            277.        281.     855   308
##  2    33.7    -114.  1996     1            284.        288.     930   302
##  3    31.2    -114.  1996     1            288.        292.     965   294
##  4    28.7    -114.  1996     1            290.        296.     985   284
##  5    26.2    -114.  1996     1            292.        296.    1000   278
##  6    23.7    -114.  1996     1            294.        297.    1000   270
##  7    21.2    -114.  1996     1            296         297.    1000   266
##  8    18.7    -114.  1996     1            297.        298.    1000   258
##  9    16.2    -114.  1996     1            298.        298.    1000   254
## 10    13.7    -114.  1996     1            298.        298.    1000   256
## # ℹ 13,814 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Equivalentemente
data %>% 
  filter(between(anio,1996,1997))
## # A tibble: 13,824 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1996     1            277.        281.     855   308
##  2    33.7    -114.  1996     1            284.        288.     930   302
##  3    31.2    -114.  1996     1            288.        292.     965   294
##  4    28.7    -114.  1996     1            290.        296.     985   284
##  5    26.2    -114.  1996     1            292.        296.    1000   278
##  6    23.7    -114.  1996     1            294.        297.    1000   270
##  7    21.2    -114.  1996     1            296         297.    1000   266
##  8    18.7    -114.  1996     1            297.        298.    1000   258
##  9    16.2    -114.  1996     1            298.        298.    1000   254
## 10    13.7    -114.  1996     1            298.        298.    1000   256
## # ℹ 13,814 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Selecciona las filas cuya variable anio es igual a 1995 y a 2000
data %>% 
  filter(anio %in% c(1995,2000))
## # A tibble: 13,824 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 13,814 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Selecciona filas cuya variable anio es 1995 y mes igual a 3
data %>% 
  filter(anio==1995,mes==3)
## # A tibble: 576 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     3            282.        278.     845   312
##  2    33.7    -114.  1995     3            289.        287.     930   304
##  3    31.2    -114.  1995     3            293.        291.     960   294
##  4    28.7    -114.  1995     3            296.        294.     990   276
##  5    26.2    -114.  1995     3            295         295.     995   268
##  6    23.7    -114.  1995     3            294.        295.    1000   258
##  7    21.2    -114.  1995     3            296.        296.    1000   254
##  8    18.7    -114.  1995     3            297.        297.    1000   248
##  9    16.2    -114.  1995     3            298.        298.    1000   250
## 10    13.7    -114.  1995     3            300.        300.    1000   248
## # ℹ 566 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Seleccionamos las filas 1 al 6
data %>% 
  slice(1:10)
## # A tibble: 10 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Eliminamos las 4 primeras filas
data %>% 
  slice(-(1:4))
## # A tibble: 41,468 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1   26.2     -114.  1995     1            292.        293.    1000   274
##  2   23.7     -114.  1995     1            294.        294.    1000   264
##  3   21.2     -114.  1995     1            295         295.    1000   258
##  4   18.7     -114.  1995     1            298.        297.    1000   252
##  5   16.2     -114.  1995     1            300.        298.    1000   250
##  6   13.7     -114.  1995     1            300.        299.    1000   250
##  7   11.2     -114.  1995     1            301         300.    1000   248
##  8    8.75    -114.  1995     1            301         300.    1000   248
##  9    6.25    -114.  1995     1            299.        300.    1000   250
## 10    3.76    -114.  1995     1            299.        300.    1000   248
## # ℹ 41,458 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Seleccionamos las filas pares de la 2 hasta la 8
data %>% 
  slice(seq(2,8,by=2))
## # A tibble: 4 × 11
##   latitud longitud  anio   mes temp_superficie temperatura presion ozono
##     <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
## 1    33.7    -114.  1995     1            280.        282.     940   304
## 2    28.7    -114.  1995     1            289.        291.     990   276
## 3    23.7    -114.  1995     1            294.        294.    1000   264
## 4    18.7    -114.  1995     1            298.        297.    1000   252
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Seleccionamos 6 filas al azar (si queremos que se puedan repetir: añadir el argumento replace=TRUE)
data %>% 
  slice_sample(n=6)
## # A tibble: 6 × 11
##   latitud longitud  anio   mes temp_superficie temperatura presion ozono
##     <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
## 1   -1.23   -109.   1997     3            299.        300.    1000   244
## 2   11.2    -114.   1997    11            303.        301.    1000   250
## 3  -21.2     -63.7  1997    11            301.        303.     980   260
## 4  -21.2     -78.7  1999     9            288.        291.    1000   280
## 5   -3.73    -76.2  1996     9            296         300.    1000   260
## 6  -11.2     -78.7  1997     8            294.        294.     950   262
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Seleccionamos las filas en función del mínimo y máximo de una variable
data %>% 
  slice_min(presion,n=6)
## # A tibble: 10 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1   -16.2    -68.7  1995    12            286.        276.     615   250
##  2   -18.7    -68.7  1995     5            282.        270.     620   244
##  3   -18.7    -66.2  1995     5            282.        270.     620   244
##  4   -18.7    -68.7  1996     1            285.        278.     620   252
##  5   -18.7    -66.2  1996     1            285.        278.     620   252
##  6   -18.7    -68.7  1996     2            286.        278.     620   256
##  7   -18.7    -66.2  1996     2            286.        278.     620   256
##  8   -18.7    -68.7  1996     3            289.        278.     620   250
##  9   -18.7    -66.2  1996     3            289.        278.     620   250
## 10   -16.2    -68.7  1996    12            283.        278.     620   254
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
data %>% 
  slice_max(ozono,n=6)
## # A tibble: 7 × 11
##   latitud longitud  anio   mes temp_superficie temperatura presion ozono
##     <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
## 1    36.2   -114.   1999     4            292.        283.     965   390
## 2    36.2    -71.2  1998     4            295         291.    1000   370
## 3    36.2    -68.7  1998     4            295         291.    1000   370
## 4    36.2    -73.7  1998     4            294.        291.    1000   368
## 5    36.2    -66.2  1998     4            294.        291.    1000   368
## 6    36.2   -111.   2000     3            283.        280.     920   368
## 7    36.2   -109.   2000     3            283.        280.     920   368
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Ordena de forma creciente
data %>% 
  arrange(latitud)
## # A tibble: 41,472 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1   -21.2   -114.   1995     1            297.        297.    1000   260
##  2   -21.2   -111.   1995     1            297.        296.    1000   260
##  3   -21.2   -109.   1995     1            297.        296     1000   260
##  4   -21.2   -106.   1995     1            297.        296.    1000   258
##  5   -21.2   -104.   1995     1            296.        296.    1000   258
##  6   -21.2   -101.   1995     1            296.        295     1000   258
##  7   -21.2    -98.8  1995     1            296.        296.    1000   256
##  8   -21.2    -96.3  1995     1            296.        295     1000   258
##  9   -21.2    -93.8  1995     1            295         295     1000   256
## 10   -21.2    -91.3  1995     1            295.        295.    1000   258
## # ℹ 41,462 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Ordena de forma decreciente
data %>% 
  arrange(desc(latitud))
## # A tibble: 41,472 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2   -114.   1995     1            273.        272.     835   304
##  2    36.2   -111.   1995     1            271.        270.     810   306
##  3    36.2   -109.   1995     1            271.        270.     810   306
##  4    36.2   -106.   1995     1            270.        271.     775   294
##  5    36.2   -104.   1995     1            273.        272.     795   308
##  6    36.2   -101.   1995     1            276.        276.     915   310
##  7    36.2    -98.8  1995     1            277.        278.     955   310
##  8    36.2    -96.3  1995     1            277.        278.     955   310
##  9    36.2    -93.8  1995     1            279.        278.     995   310
## 10    36.2    -91.3  1995     1            279.        278.     995   310
## # ℹ 41,462 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Ordena primero por latitud y a continuación por ozono
data %>% 
  arrange(latitud,ozono)
## # A tibble: 41,472 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1   -21.2    -83.7  1995     2            295.        294.    1000   242
##  2   -21.2    -71.2  1995     4            295.        295      975   242
##  3   -21.2   -114.   1998     4            298.        298.    1000   242
##  4   -21.2   -111.   1998     4            298.        298.    1000   242
##  5   -21.2   -109.   1998     4            297.        297.    1000   242
##  6   -21.2   -106.   1998     4            297.        296     1000   242
##  7   -21.2    -58.7  1998     4            299.        300.     995   242
##  8   -21.2   -114.   1995     4            299.        299.    1000   244
##  9   -21.2    -83.7  1995     4            294.        295.    1000   244
## 10   -21.2    -81.2  1995     4            294.        295     1000   244
## # ℹ 41,462 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Elimina las filas duplicadas para la variable latitud
data %>% 
  distinct(latitud)
## # A tibble: 24 × 1
##    latitud
##      <dbl>
##  1    36.2
##  2    33.7
##  3    31.2
##  4    28.7
##  5    26.2
##  6    23.7
##  7    21.2
##  8    18.7
##  9    16.2
## 10    13.7
## # ℹ 14 more rows
#Elimina las filas duplicadas para la variable latitud y muestra todas las variables
data %>% 
  distinct(latitud,
           .keep_all = TRUE)
## # A tibble: 24 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 14 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Selecciona las variables latitud, longitud y temperatura
data %>% 
  select(latitud,longitud,temperatura)
## # A tibble: 41,472 × 3
##    latitud longitud temperatura
##      <dbl>    <dbl>       <dbl>
##  1    36.2    -114.        272.
##  2    33.7    -114.        282.
##  3    31.2    -114.        285.
##  4    28.7    -114.        291.
##  5    26.2    -114.        293.
##  6    23.7    -114.        294.
##  7    21.2    -114.        295.
##  8    18.7    -114.        297.
##  9    16.2    -114.        298.
## 10    13.7    -114.        299.
## # ℹ 41,462 more rows
#Elimina las variables ozono y nube_media
data %>% 
  select(-c(ozono,nube_media))
## # A tibble: 41,472 × 9
##    latitud longitud  anio   mes temp_superficie temperatura presion nube_baja
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl>     <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835       7.5
##  2    33.7    -114.  1995     1            280.        282.     940      11.5
##  3    31.2    -114.  1995     1            285.        285.     960      16.5
##  4    28.7    -114.  1995     1            289.        291.     990      20.5
##  5    26.2    -114.  1995     1            292.        293.    1000      26  
##  6    23.7    -114.  1995     1            294.        294.    1000      30  
##  7    21.2    -114.  1995     1            295         295.    1000      29.5
##  8    18.7    -114.  1995     1            298.        297.    1000      26.5
##  9    16.2    -114.  1995     1            300.        298.    1000      27.5
## 10    13.7    -114.  1995     1            300.        299.    1000      26  
## # ℹ 41,462 more rows
## # ℹ 1 more variable: nube_alta <dbl>
temp <- data %>% 
  pull(temperatura)
temp[1:10]
##  [1] 272.1 282.2 285.2 290.7 292.7 293.6 294.6 296.9 297.8 298.7
#Reordena las columnas anio y mes situándolas delante de latitud
data %>% 
  relocate(anio,mes,.before = latitud)
## # A tibble: 41,472 × 11
##     anio   mes latitud longitud temp_superficie temperatura presion ozono
##    <int> <int>   <dbl>    <dbl>           <dbl>       <dbl>   <dbl> <dbl>
##  1  1995     1    36.2    -114.            273.        272.     835   304
##  2  1995     1    33.7    -114.            280.        282.     940   304
##  3  1995     1    31.2    -114.            285.        285.     960   298
##  4  1995     1    28.7    -114.            289.        291.     990   276
##  5  1995     1    26.2    -114.            292.        293.    1000   274
##  6  1995     1    23.7    -114.            294.        294.    1000   264
##  7  1995     1    21.2    -114.            295         295.    1000   258
##  8  1995     1    18.7    -114.            298.        297.    1000   252
##  9  1995     1    16.2    -114.            300.        298.    1000   250
## 10  1995     1    13.7    -114.            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Reordena las columnas latitud y longitud situándolas detrás de mes
data %>% 
  relocate(latitud,longitud,.after = mes)
## # A tibble: 41,472 × 11
##     anio   mes latitud longitud temp_superficie temperatura presion ozono
##    <int> <int>   <dbl>    <dbl>           <dbl>       <dbl>   <dbl> <dbl>
##  1  1995     1    36.2    -114.            273.        272.     835   304
##  2  1995     1    33.7    -114.            280.        282.     940   304
##  3  1995     1    31.2    -114.            285.        285.     960   298
##  4  1995     1    28.7    -114.            289.        291.     990   276
##  5  1995     1    26.2    -114.            292.        293.    1000   274
##  6  1995     1    23.7    -114.            294.        294.    1000   264
##  7  1995     1    21.2    -114.            295         295.    1000   258
##  8  1995     1    18.7    -114.            298.        297.    1000   252
##  9  1995     1    16.2    -114.            300.        298.    1000   250
## 10  1995     1    13.7    -114.            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Crea una variable que sume las variables nube_baja,nube_media y nube_alta (además que ésta nueva la sitúe al principio)
data %>% 
  mutate(nubes = nube_baja + nube_media + nube_alta) %>% 
  relocate(nubes,.before=latitud)
## # A tibble: 41,472 × 12
##    nubes latitud longitud  anio   mes temp_superficie temperatura presion ozono
##    <dbl>   <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1  68      36.2    -114.  1995     1            273.        272.     835   304
##  2  64      33.7    -114.  1995     1            280.        282.     940   304
##  3  58.5    31.2    -114.  1995     1            285.        285.     960   298
##  4  48      28.7    -114.  1995     1            289.        291.     990   276
##  5  44      26.2    -114.  1995     1            292.        293.    1000   274
##  6  47.5    23.7    -114.  1995     1            294.        294.    1000   264
##  7  55      21.2    -114.  1995     1            295         295.    1000   258
##  8  63.5    18.7    -114.  1995     1            298.        297.    1000   252
##  9  68.5    16.2    -114.  1995     1            300.        298.    1000   250
## 10  63.5    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Crea una variable que sume las variables nube_baja,nube_media y nube_alta quedándonos solo con ésta nueva variable
data %>% 
  transmute(nubes = nube_baja + nube_media + nube_alta)
## # A tibble: 41,472 × 1
##    nubes
##    <dbl>
##  1  68  
##  2  64  
##  3  58.5
##  4  48  
##  5  44  
##  6  47.5
##  7  55  
##  8  63.5
##  9  68.5
## 10  63.5
## # ℹ 41,462 more rows
#Crea una variable a partir de la variable anio según una serie de condiciones.
data %>% 
  mutate(agnos = case_when(anio <= 1996 ~ "Inferior a 1997",
                           (anio > 1996)&(anio <= 1998) ~ "Entre 1997 y 1998",
                           anio > 1998 ~ "Superior a 1998"))
## # A tibble: 41,472 × 12
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 4 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>,
## #   agnos <chr>
#Crea una variable a partir de la variable anio dividiendo los valores en intervalos: (1994,1996],(1996,1998],(1998,2000]. Si se quiere que el intervalo sea cerrado por la derecha, basta indicar right = TRUE. Además, si se quiere que el valor más bajo esté en el primer intervalo se debe añadir include.lowest = TRUE
data %>% 
  mutate(agnos = cut(anio,
                     breaks = c(1994,1996,1998,2000)))
## # A tibble: 41,472 × 12
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 4 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>,
## #   agnos <fct>
#Crea una variable a partir de la variable anio dividiendo los valores en intervalos: (1994,1996],(1996,1998],(1998,2000], pero con etiquetas
data %>% 
  mutate(agnos = cut(anio,
                     breaks = c(1994,1996,1998,2000),
                     labels = c("Inferior a 1997","Entre 1997 y 1998","Superior a 1998")))
## # A tibble: 41,472 × 12
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 4 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>,
## #   agnos <fct>
#Crea una variable a partir de la variable anio dividiendo la muestra en partes iguales (empleando los cuantiles, recordando que debe indicarse que el valor inferior debe incluirse). 
data %>% 
  mutate(agnos = cut(anio,
                     breaks = quantile(anio,probs=seq(0,1,0.25)),
                     include.lowest = TRUE))
## # A tibble: 41,472 × 12
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 41,462 more rows
## # ℹ 4 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>,
## #   agnos <fct>
data %>% 
  drop_na()
## # A tibble: 41,362 × 11
##    latitud longitud  anio   mes temp_superficie temperatura presion ozono
##      <dbl>    <dbl> <int> <int>           <dbl>       <dbl>   <dbl> <dbl>
##  1    36.2    -114.  1995     1            273.        272.     835   304
##  2    33.7    -114.  1995     1            280.        282.     940   304
##  3    31.2    -114.  1995     1            285.        285.     960   298
##  4    28.7    -114.  1995     1            289.        291.     990   276
##  5    26.2    -114.  1995     1            292.        293.    1000   274
##  6    23.7    -114.  1995     1            294.        294.    1000   264
##  7    21.2    -114.  1995     1            295         295.    1000   258
##  8    18.7    -114.  1995     1            298.        297.    1000   252
##  9    16.2    -114.  1995     1            300.        298.    1000   250
## 10    13.7    -114.  1995     1            300.        299.    1000   250
## # ℹ 41,352 more rows
## # ℹ 3 more variables: nube_baja <dbl>, nube_media <dbl>, nube_alta <dbl>
#Calcula la media y desviación típica para la variable creada nubes
data %>% 
  transmute(nubes = nube_baja + nube_media + nube_alta) %>% 
  summarise(nube.mean=mean(nubes,na.rm=TRUE),
            nube.sd=sd(nubes,na.rm = TRUE))
## # A tibble: 1 × 2
##   nube.mean nube.sd
##       <dbl>   <dbl>
## 1      53.5    16.8
#Agrupa las filas por la variable anio y a continuación, crea la nueva variable nubes y calcula su media y desviación típica.
data %>% 
  group_by(anio) %>% 
  transmute(nubes = nube_baja + nube_media + nube_alta) %>% 
  summarise(nube.mean=mean(nubes,na.rm=TRUE),
            nube.sd=sd(nubes,na.rm = TRUE))
## # A tibble: 6 × 3
##    anio nube.mean nube.sd
##   <int>     <dbl>   <dbl>
## 1  1995      53.4    16.6
## 2  1996      53.2    16.8
## 3  1997      53.5    16.3
## 4  1998      54.1    17.7
## 5  1999      53.3    17.1
## 6  2000      53.3    16.5

Como podemos observar con este último ejemplo, trabajar con \(\texttt{tibles}\) permite encadenar órdenes de \(\texttt{R}\) de manera sencilla.