Introducción a R

R es un lenguaje de programación creado con el fin de analizar y visualizar datos. El objetivo de este apartado es presentar una breve introducción a R.

Aritmética con R

Se podría decir que R no es más que una calculadora científica muy potente, por lo que naturalmente R puede manejar la arítmetica básica sin problemas.

Operaciones aritméticas básicas

# Suma
2 + 4
## [1] 6
# Resta
5 - 7
## [1] -2
# Multiplicación
7 * 3
## [1] 21
# División
7 / 4
## [1] 1.75
# Potenciación
5^3
## [1] 125

Funciones aritméticas básicas

# Logaritmos
log10(100)
## [1] 2
# Exponenciales
exp(8)
## [1] 2980.958
# Valor absoluto
abs(-7)
## [1] 7
# Raíz Cuadrada
sqrt(26)
## [1] 5.09902

Guardando objetos

En R casi todo es un objeto, estamos hablando de números, cadenas de caracteres (palabras, oraciones) o incluso estructuras más complejas como el resultado de una gráfica o resúmenes estadísticos. Cómo crear objetos y asignar valores sera crucial.

Para crear un objeto simplemente le damos un nombre al objeto y le asignamos un valor con el operador de asignación <-

mi_objeto <- 71

Ahora cada vez que utilicemos mi_objeto en nuestro código (salvo actualicemos el valor), estaremos usando su valor que en este caso es 71.

mi_objeto
## [1] 71

Se pueden hacer operaciones con nuestros objetos

mi_objeto + 10
## [1] 81
mi_objeto2 <- 9

mi_objeto3 <- mi_objeto + mi_objeto2

Hay muchos diferentes tipos de valores que pueden ser asignados a un objeto, por ejemplo.

password <- "tacos"

Para reemplazar el valor de un objeto simplemente hay que volverlo asignar

password <- "doritos"

Nombrando objetos en R

Aunque no lo parezca, cómo nombrar objetos puede ser algo de lo más difícil en R. Idealmente el nombre debe ser informativo y corto, lo cual no siempre es fácil. Hay 3 estilos en general para nombrar a un objeto (sobre todo para aquellos que constan de dos o más palabras)

mi_objeto <- "manzanas"
mi.objeto <- "manzanas"
miObjeto <- "manzanas"

En R se recomienda el uso de guión bajo sin embargo puedes usar cualquiera de los tres ejemplos, eso sí, elijas el que elijas, se constante.

Hay algunas limitantes a tomar en cuenta cuando se nombren objetos. El nombre de los objetos no puede iniciar con un número 1objeto o iniciar con un punto y seguido de un número .1objeto.

También se recomienda no usar caracteres alfanuméricos (&, ^, /, !, etc) y nosotros que hablamos español, lo mejor es evitar acentuar nuestros nombres y evitar el uso de la ñ. También hay que evitar llamar a tu objeto como una “palabra reserveda” (if, TRUE, NA) o funciones ya existentes como exp, sqrt.

Tipos de Datos en R

Tipos de datos básicos

  • Numericos
  • Caracteres
  • Lógicos
edad <- 45 # Variable numérica
nombre <- "Pedro" # Variable de caracter
estudiante <- FALSE # Variable lógica

Estructuras de Datos

Escalares

En R, un escalar es un dato individual, representando un único valor. A diferencia de las estructuras de datos que contienen múltiples elementos, como vectores o matrices, un escalar en R es un valor único.

Algunas características clave de escalares en R incluyen:

  1. Unidimensional: Aunque la mayoría de las estructuras de datos en R son multidimensionales, los escalares son unidimensionales, ya que representan un solo valor.

  2. Homogeneidad de Tipo de Datos: Al igual que con otras estructuras en R, los escalares tienen un tipo de datos específico, como numérico, de caracteres o lógico.

  3. Creación de Escalares:

    • Asignación Directa: Puedes asignar un valor directamente a una variable para crear un escalar.
     # Ejemplo: Crear un escalar numérico
     mi_escalar <- 42
  • Resultado de Operaciones: Al realizar operaciones, el resultado puede ser un escalar.
     # Ejemplo: Resultado de una operación
     resultado <- 5 + 7
  1. Operaciones con Escalares: Los escalares pueden participar en operaciones aritméticas y lógicas de manera similar a otros tipos de datos en R.

Aquí hay ejemplos de creación y operación con escalares en R:

# Crear escalares mediante asignación directa
edad <- 25
altura <- 1.75
nombre <- "Juan"
es_estudiante <- TRUE

# Realizar operaciones con escalares
suma <- edad + 5
nueva_altura <- altura * 1.1

Vectores

En R, un vector es una estructura de datos unidimensional que contiene elementos del mismo tipo de datos, ya sea numérico, de caracteres o lógico. Los elementos de un vector están organizados secuencialmente, y cada elemento tiene un índice que indica su posición en el vector.

Aquí hay algunas características clave de los vectores en R:

  1. Homogeneidad de Tipo de Datos: Todos los elementos de un vector deben ser del mismo tipo de datos. Por ejemplo, un vector puede contener solo números, solo caracteres o solo valores lógicos.

  2. Longitud Fija: La longitud de un vector es fija cuando se crea, y no puede cambiarse sin crear un nuevo vector.

  3. Acceso a Elementos: Los elementos de un vector se acceden mediante su índice. El índice en R comienza desde 1.

  4. Creación de Vectores:

    • Con la Función c(): Puedes crear un vector combinando elementos con la función c().
     # Ejemplo: Crear un vector numérico
     mi_vector <- c(1, 2, 3, 4, 5)
  • Usando Secuencias con : o seq(): Puedes crear vectores de manera más concisa usando la secuencia : o la función seq().
     # Ejemplo: Crear un vector de 1 a 5 usando la secuencia
     otro_vector <- 1:5
  1. Operaciones con Vectores: Los vectores en R soportan operaciones vectorizadas, lo que significa que las operaciones se aplican elemento por elemento.
   # Ejemplo: Suma de dos vectores
   vec1 <- c(1, 2, 3)
   vec2 <- c(4, 5, 6)
   suma_vectores <- vec1 + vec2
  1. Funciones Relacionadas con Vectores:
  • length(): Devuelve la longitud del vector.
  • sum(), mean(), max(), min(): Calculan la suma, media, máximo, mínimo de los elementos del vector.
  • sort(): Ordena los elementos del vector.
Escalar y un vector
Escalar y un vector

Matrices

En R, una matriz es una estructura de datos bidimensional que almacena elementos del mismo tipo de datos en filas y columnas. Cada elemento de la matriz está identificado por su posición única, dada por el número de fila y el número de columna.

Características clave de las matrices en R:

  1. Homogeneidad de Tipo de Datos: Todos los elementos de una matriz deben ser del mismo tipo de datos, ya sea numérico, de caracteres o lógico.

  2. Estructura Bidimensional: Las matrices tienen dos dimensiones: filas y columnas, lo que las diferencia de los vectores unidimensionales.

  3. Creación de Matrices:

    • Usando la Función matrix(): Puedes crear una matriz especificando los datos, el número de filas y el número de columnas.
     # Ejemplo: Crear una matriz numérica 2x3
     mi_matriz <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)
  • Combinando Vectores con cbind() o rbind(): Puedes crear una matriz combinando vectores horizontalmente (cbind()) o verticalmente (rbind()).
     # Ejemplo: Crear una matriz mediante cbind()
     vec1 <- c(1, 2)
     vec2 <- c(3, 4)
     mi_matriz <- cbind(vec1, vec2)
  1. Operaciones con Matrices: Las matrices en R admiten diversas operaciones matriciales, como la transposición, la multiplicación y la inversión.

  2. Funciones Relacionadas con Matrices:

    • dim(): Devuelve las dimensiones (número de filas y columnas) de la matriz.
    • rownames() y colnames(): Permiten asignar y recuperar nombres de filas y columnas, respectivamente.
    • diag(): Crea una matriz diagonal.

Ejemplo de creación y operación con una matriz en R:

# Crear una matriz numérica 2x3
mi_matriz <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2, ncol = 3)

# Mostrar la matriz
print(mi_matriz)
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
# Acceder al elemento en la primera fila y segunda columna
print(mi_matriz[1, 2])
## [1] 3
# Realizar una operación matricial: transposición
transpuesta_matriz <- t(mi_matriz)
print(transpuesta_matriz)
##      [,1] [,2]
## [1,]    1    2
## [2,]    3    4
## [3,]    5    6

Arreglos

En R, un arreglo es una estructura de datos multidimensional que puede contener elementos del mismo tipo de datos. A diferencia de las matrices, que son bidimensionales, los arreglos pueden tener más de dos dimensiones. Un arreglo en R se caracteriza por su forma, que está definida por el número de dimensiones y el tamaño en cada dimensión.

Características clave de los arreglos en R:

  1. Multidimensionalidad: Los arreglos pueden tener más de dos dimensiones, lo que los hace aptos para almacenar datos en estructuras con formas más complejas.

  2. Homogeneidad de Tipo de Datos: Al igual que en matrices y vectores, todos los elementos de un arreglo deben ser del mismo tipo de datos.

  3. Creación de arreglos:

    • Con la Función array(): Puedes crear un arreglo especificando los datos, el número de dimensiones y el tamaño en cada dimensión.
     # Ejemplo: Crear un arreglo tridimensional
     mi_arreglo <- array(c(1, 2, 3, 4, 5, 6, 7, 8), dim = c(2, 2, 2))
  1. Acceso a Elementos: Los elementos de un arreglo se acceden mediante índices en cada dimensión.

  2. Funciones Relacionadas con arreglos:

    • dim(): Devuelve las dimensiones del arreglo.
    • length(): Devuelve la longitud total del arreglo.
    • aperm(): Permuta las dimensiones de un arreglo.

Ejemplo de creación y operación con un arreglo en R:

# Crear un arreglo tridimensional
mi_arreglo <- array(c(1, 2, 3, 4, 5, 6, 7, 8), dim = c(2, 2, 2))

# Mostrar el arreglo
print(mi_arreglo)
## , , 1
## 
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    5    7
## [2,]    6    8
# Acceder al elemento en la primera fila, segunda columna y segunda capa
print(mi_arreglo[1, 2, 2])
## [1] 7
# Calcular la suma a lo largo de la tercera dimensión
suma_tercera_dimension <- sum(mi_arreglo[, , 1])
print(suma_tercera_dimension)
## [1] 10
Matriz y un arreglo
Matriz y un arreglo

Listas

En R, una lista es una estructura de datos que puede contener elementos de diferentes tipos, incluidos vectores, matrices, otros tipos de listas, funciones y cualquier otro objeto de R. A diferencia de vectores y matrices, las listas permiten almacenar información heterogénea y pueden tener longitudes variables. Cada elemento en una lista se denomina componente.

Características clave de las listas en R:

  1. Heterogeneidad de Tipo de Datos: Los elementos de una lista pueden ser de diferentes tipos de datos, permitiendo la mezcla de números, caracteres, vectores, etc.

  2. Longitud Variable: A diferencia de vectores y matrices, las listas pueden contener un número variable de elementos.

  3. Creación de Listas:

    • Con la Función list(): Puedes crear una lista especificando los elementos que deseas incluir.
     # Ejemplo: Crear una lista con diferentes tipos de datos
     mi_lista <- list(nombre = "Juan", edad = 25, notas = c(90, 85, 92))
  1. Acceso a Componentes: Puedes acceder a los elementos de una lista utilizando su nombre o su índice.
   # Acceder al componente "nombre"
   print(mi_lista$nombre)
## [1] "Juan"
   # Acceder al primer componente
   print(mi_lista[[1]])
## [1] "Juan"
  1. Operaciones con listas: Puedes realizar diversas operaciones con listas, como añadir, eliminar o combinar componentes.

  2. Anidamiento de Listas: as listas pueden contener otras listas, permitiendo la creación de estructuras de datos complejas.

Ejemplo de creación y operación con una lista en R:

# Crear una lista con diferentes tipos de datos
mi_lista <- list(nombre = "Juan", edad = 25, notas = c(90, 85, 92))

# Mostrar la lista
print(mi_lista)
## $nombre
## [1] "Juan"
## 
## $edad
## [1] 25
## 
## $notas
## [1] 90 85 92
# Acceder al componente "nombre"
print(mi_lista$nombre)
## [1] "Juan"
# Acceder al primer componente
print(mi_lista[[1]])
## [1] "Juan"
# Añadir un nuevo componente a la lista
mi_lista$ciudad <- "Ciudad A"
print(mi_lista)
## $nombre
## [1] "Juan"
## 
## $edad
## [1] 25
## 
## $notas
## [1] 90 85 92
## 
## $ciudad
## [1] "Ciudad A"

Data frames

Hasta ahora, la estructura de datos más comúnmente utilizada para almacenar datos es el data frame. Un data frame es un objeto bidimensional potente compuesto por filas y columnas que se asemeja superficialmente a una matriz. Sin embargo, mientras que las matrices están limitadas a contener datos del mismo tipo, los marcos de datos pueden contener una mezcla de diferentes tipos de datos. Por lo general, en un data frame, cada fila corresponde a una observación individual y cada columna corresponde a una variable medida o registrada diferente. Este diseño puede resultar familiar para aquellos que utilizan LibreOffice Calc, Microsoft Excel o Google sheets para gestionar y almacenar sus datos. Quizás una forma útil de pensar en los data frame es que están compuestos esencialmente por un conjunto de vectores (columnas), siendo que cada vector contiene su propio tipo de datos, pero el tipo de datos puede ser diferente entre vectores.

En resumen, un data frame es una estructura de datos bidimensional que se utiliza para organizar y almacenar datos de manera tabular, similar a una hoja de cálculo. Un data frame puede contener una mezcla de diferentes tipos de datos, como numéricos, de caracteres, lógicos, factores y más. Cada columna en un data frame representa una variable, mientras que cada fila corresponde a una observación o entrada específica.

Características clave de los data frames en R:

  1. Bidimensionalidad: Los data frames tienen dos dimensiones, con filas y columnas, lo que permite organizar datos de manera tabular.

  2. Heterogeneidad de Datos: A diferencia de las matrices, los data frames pueden contener diferentes tipos de datos en cada columna.

  3. Etiquetas de Columnas: Las columnas de un data frame pueden tener nombres descriptivos, facilitando el acceso y manipulación de datos.

  4. Creación de Data Frames:

    • Con la Función data.frame(): Se pueden crear data frames combinando vectores de diferentes tipos de datos.
     # Ejemplo: Crear un data frame simple
     mi_data_frame <- data.frame(
       Nombre = c("Juan", "María", "Pedro"),
       Edad = c(25, 30, 22),
       Puntuacion = c(90, 85, 92)
     )
  1. Acceso a Datos: Los datos en un data frame se acceden utilizando el nombre de la columna y el índice de fila.
   # Acceder a la edad de la segunda persona
   edad_segunda_persona <- mi_data_frame$Edad[2]
  1. Operaciones y análisis de datos: Los data frames son fundamentales para realizar operaciones, análisis exploratorio y manipulación de datos en R.

Ejemplo de creación y operación con un data frame en R:

# Crear un data frame simple
mi_data_frame <- data.frame(
  Nombre = c("Juan", "María", "Pedro"),
  Edad = c(25, 30, 22),
  Puntuacion = c(90, 85, 92)
)

# Mostrar el data frame
print(mi_data_frame)
##   Nombre Edad Puntuacion
## 1   Juan   25         90
## 2  María   30         85
## 3  Pedro   22         92
# Calcular la media de las puntuaciones
media_puntuacion <- mean(mi_data_frame$Puntuacion)
print(media_puntuacion)
## [1] 89

Existen varios data frames clásicos en R que son comúnmente utilizados para prácticas y ejemplos en análisis de datos. Algunos de ellos están preinstalados en R. Aquí hay algunos ejemplos:

  • mtcars
  • iris
  • ChickWeight
  • AirPassengers
  • faithful
  • PlantGrowth

Para ver una lista completa:

data()

Explorando un juego de datos con dplyr

Ahora que sabemos algo de lo básico de R, es momento de ponerlo en acción. Lo ideal es tener nuestros anális ordenados en scripts separados. Una función clave para mantener orden en nuestros archivos es setwd(), esta función recibe una cadena de caracteres que indican la ubicación en nuestra computadora donde queremos estar trabajando.

# Definir un directorio de trabajo
setwd("Documentos/mis_scripts/")

# Obtener el directorio de trabajo actual
getwd()

Después de definir el directorio de trabajo es recomendable cargar las librerías a utilizar al inicio del script, en este caso usaremos las librerías dplyr y gapminder.

dplyr

dplyr es un paquete en R diseñado para facilitar la manipulación, filtrado, resumen y transformación de datos de manera intuitiva y eficiente. Ofrece una sintaxis clara y concisa para realizar operaciones comunes en conjuntos de datos, lo que facilita la exploración y análisis de datos.

Las principales funciones y verbos proporcionados por dplyr incluyen:

  1. filter(): Filtrar filas del conjunto de datos basándose en condiciones específicas.

  2. select(): Seleccionar columnas específicas del conjunto de datos.

  3. arrange(): Ordenar el conjunto de datos basándose en una o más columnas.

  4. mutate(): Crear o modificar columnas (variables) en el conjunto de datos.

  5. summarise(): Resumir datos para obtener estadísticas descriptivas.

  6. group_by(): Agrupar el conjunto de datos por una o más variables para realizar operaciones en grupos.

  7. join(): Realizar operaciones de combinación de datos (unión) entre diferentes conjuntos de datos.

Estos verbos permiten realizar tareas comunes de manipulación de datos de una manera más expresiva y legible. Además, dplyr utiliza el operador %>% (pipe) para encadenar operaciones de manera más fluida, lo que facilita la creación de secuencias de manipulación de datos.

En resumen, dplyr simplifica y mejora la eficiencia de las tareas relacionadas con la manipulación y análisis de datos en R, proporcionando una interfaz más intuitiva y fácil de usar.

Hay que asegurarnos primero de tener instalado los paquetes dplyr y gapminder

# Instalar paquetes
install.packages("dplyr")
install.packages("gapminder")

Una vez instalados los paquetes los cargamos.

NOTA Sólo es necesario instalar el paquete una vez, a menos de que R nos pida que lo actualicemos

# Cargar librerías
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(gapminder)

Lo siguiente será cargar los datos que queramos analizar. Estos datos los obtendremos del paquete gapminder que acabamos de instalar y cargar. El conjunto de datos Gapminder es un conjunto de datos que contiene información sobre varios indicadores socioeconómicos y de salud para países de todo el mundo a lo largo del tiempo.

El conjunto de datos incluye variables como el Producto Interno Bruto (PIB) per cápita, la expectativa de vida, la población, la tasa de fertilidad y la región a la que pertenece cada país. Estos datos abarcan un período de tiempo significativo y permiten analizar la evolución de diferentes indicadores en diferentes países.

Visualizar las primeras filas del conjunto de datos:

# Guardemos nuestros datos en una variable
datos <- gapminder

# Visualizar las primeras filas del conjunto
head(datos)
## # A tibble: 6 × 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.

Otra forma sería con glimpse

glimpse(datos)
## Rows: 1,704
## Columns: 6
## $ country   <fct> "Afghanistan", "Afghanistan", "Afghanistan", "Afghanistan", …
## $ continent <fct> Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, Asia, …
## $ year      <int> 1952, 1957, 1962, 1967, 1972, 1977, 1982, 1987, 1992, 1997, …
## $ lifeExp   <dbl> 28.801, 30.332, 31.997, 34.020, 36.088, 38.438, 39.854, 40.8…
## $ pop       <int> 8425333, 9240934, 10267083, 11537966, 13079460, 14880372, 12…
## $ gdpPercap <dbl> 779.4453, 820.8530, 853.1007, 836.1971, 739.9811, 786.1134, …

Seleccionar columnas

A veces no necesitamos trabajar con todas las columnas que tenemos en nuestros datos, para hacer esto solo necesitamos usar la función select y darle los nombres de las columnas que necesitamos.

# Seleccionar solo tres columnas en específico
datos %>% select(country, year, pop)
## # A tibble: 1,704 × 3
##    country      year      pop
##    <fct>       <int>    <int>
##  1 Afghanistan  1952  8425333
##  2 Afghanistan  1957  9240934
##  3 Afghanistan  1962 10267083
##  4 Afghanistan  1967 11537966
##  5 Afghanistan  1972 13079460
##  6 Afghanistan  1977 14880372
##  7 Afghanistan  1982 12881816
##  8 Afghanistan  1987 13867957
##  9 Afghanistan  1992 16317921
## 10 Afghanistan  1997 22227415
## # ℹ 1,694 more rows

También podemos decirle a select las columnas que no necesitamos usando el prefijo -

# Seleccionar todas las columnas menos continent
datos %>% select(-continent)
## # A tibble: 1,704 × 5
##    country      year lifeExp      pop gdpPercap
##    <fct>       <int>   <dbl>    <int>     <dbl>
##  1 Afghanistan  1952    28.8  8425333      779.
##  2 Afghanistan  1957    30.3  9240934      821.
##  3 Afghanistan  1962    32.0 10267083      853.
##  4 Afghanistan  1967    34.0 11537966      836.
##  5 Afghanistan  1972    36.1 13079460      740.
##  6 Afghanistan  1977    38.4 14880372      786.
##  7 Afghanistan  1982    39.9 12881816      978.
##  8 Afghanistan  1987    40.8 13867957      852.
##  9 Afghanistan  1992    41.7 16317921      649.
## 10 Afghanistan  1997    41.8 22227415      635.
## # ℹ 1,694 more rows

Filtrado de datos

Filtrar es una de las operaciones más usadas, no siempre toda la información es relevante en un momento dado. Para hacer eso usaremos la función filter()

# Filtrar sólo los datos de 2007 para las columnas country, year, lifeExp

datos %>%
  select(country, year, lifeExp) %>%
  filter(year == 2007)
## # A tibble: 142 × 3
##    country      year lifeExp
##    <fct>       <int>   <dbl>
##  1 Afghanistan  2007    43.8
##  2 Albania      2007    76.4
##  3 Algeria      2007    72.3
##  4 Angola       2007    42.7
##  5 Argentina    2007    75.3
##  6 Australia    2007    81.2
##  7 Austria      2007    79.8
##  8 Bahrain      2007    75.6
##  9 Bangladesh   2007    64.1
## 10 Belgium      2007    79.4
## # ℹ 132 more rows

También se pueden anidar varias condiciones para la función filter()

datos %>%
  select(country, year, lifeExp) %>%
  filter(year == 2007, country == "France")
## # A tibble: 1 × 3
##   country  year lifeExp
##   <fct>   <int>   <dbl>
## 1 France   2007    80.7

¿Y si queremos de multiples paises? podemos usar el operador %in% en lugar de la igualdad

datos %>%
  select(country, year, lifeExp) %>%
  filter(year == 2007, country %in% c("Poland", "Brazil"))
## # A tibble: 2 × 3
##   country  year lifeExp
##   <fct>   <int>   <dbl>
## 1 Brazil   2007    72.4
## 2 Poland   2007    75.6

Ordenar datos

A veces queremos ordenar nuestros datos por la información de columnas específicas, para esto usaremos la función arrange()

# Filtrar los resultados por esperanza de vida
datos %>%
  select(country, year, lifeExp) %>%
  filter(year == 2007) %>%
  arrange(lifeExp)
## # A tibble: 142 × 3
##    country                   year lifeExp
##    <fct>                    <int>   <dbl>
##  1 Swaziland                 2007    39.6
##  2 Mozambique                2007    42.1
##  3 Zambia                    2007    42.4
##  4 Sierra Leone              2007    42.6
##  5 Lesotho                   2007    42.6
##  6 Angola                    2007    42.7
##  7 Zimbabwe                  2007    43.5
##  8 Afghanistan               2007    43.8
##  9 Central African Republic  2007    44.7
## 10 Liberia                   2007    45.7
## # ℹ 132 more rows

Como pueden observar el resultado se ordeno de menor a mayor (de manera ascendiente), si lo queremos de manera descendiente podemos hacer lo siguiente

datos %>%
  select(country, year, lifeExp) %>%
  filter(year == 2007) %>%
  arrange(desc(lifeExp))
## # A tibble: 142 × 3
##    country           year lifeExp
##    <fct>            <int>   <dbl>
##  1 Japan             2007    82.6
##  2 Hong Kong, China  2007    82.2
##  3 Iceland           2007    81.8
##  4 Switzerland       2007    81.7
##  5 Australia         2007    81.2
##  6 Spain             2007    80.9
##  7 Sweden            2007    80.9
##  8 Israel            2007    80.7
##  9 France            2007    80.7
## 10 Canada            2007    80.7
## # ℹ 132 more rows

A veces sólo quieres que te regrese un número determinado de resultados, para esto usaremos la función top_n()

datos %>%
  select(country, year, lifeExp) %>%
  filter(year == 2007) %>%
  arrange(desc(lifeExp)) %>%
  top_n(5)
## Selecting by lifeExp
## # A tibble: 5 × 3
##   country           year lifeExp
##   <fct>            <int>   <dbl>
## 1 Japan             2007    82.6
## 2 Hong Kong, China  2007    82.2
## 3 Iceland           2007    81.8
## 4 Switzerland       2007    81.7
## 5 Australia         2007    81.2

Crear nuevas columnas

Para crear nuevas columnas podemos usar la función mutate(), más allá de crear nuevas columnas, mutate nos ayuda a hacer operaciones y guardarlas (en una nueva columna)

Por ejemplo, calcular el PIB (GDP)

datos %>%
  select(country, year, pop, gdpPercap) %>%
  filter(year == 2007) %>%
  mutate(gdp = pop * gdpPercap) %>%
  arrange(desc(gdp)) %>%
  top_n(5)
## Selecting by gdp
## # A tibble: 5 × 5
##   country        year        pop gdpPercap     gdp
##   <fct>         <int>      <int>     <dbl>   <dbl>
## 1 United States  2007  301139947    42952. 1.29e13
## 2 China          2007 1318683096     4959. 6.54e12
## 3 Japan          2007  127467972    31656. 4.04e12
## 4 India          2007 1110396331     2452. 2.72e12
## 5 Germany        2007   82400996    32170. 2.65e12

Calcular resumenes estadísticos

Si se necesita realizar un estadístico para una columna podemos usar la función summarize()

datos %>%
  summarize(avgLifeExp = mean(lifeExp))
## # A tibble: 1 × 1
##   avgLifeExp
##        <dbl>
## 1       59.5

De igual manera que en casos anteriores, podemos encadenar nuestras funciones para obtener resultados muy específicos

datos %>%
  filter(year == 2007, continent == "Americas") %>%
  summarize(avgLifeExp = mean(lifeExp))
## # A tibble: 1 × 1
##   avgLifeExp
##        <dbl>
## 1       73.6

Agrupar

Los resumenes estadísticos se vuelven aún más poderosos cuando se hacen dirigidos a grupos de información. `goup_by() será la función que nos permitirá hacer grupos.

datos %>%
  filter(year == 2007) %>%
  group_by(continent) %>%
  summarize(avgLifeExp = mean(lifeExp))
## # A tibble: 5 × 2
##   continent avgLifeExp
##   <fct>          <dbl>
## 1 Africa          54.8
## 2 Americas        73.6
## 3 Asia            70.7
## 4 Europe          77.6
## 5 Oceania         80.7