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
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
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.