Características generales del lenguaje R

R es un lenguaje de programación enfocado en análisis estadístico. Es ampliamente utilizado en diversas áreas de investigación, entre las que pueden mencionarse aprendizaje automático (machine learning), ciencia de datos y big data, con aplicaciones en campos como biomedicina, bioinformática y finanzas, entre muchos otros. Fue creado por Ross Ihaka y Robert Gentleman en la Universidad de Auckland, Nueva Zelanda, en 1993.

Algunas de las principales características de este lenguaje son:

R es un proyecto de software libre que se comparte mediante una licencia GNU General Public Licence (GNU GPL). Esta característica permite que la funcionalidad original de R pueda ser ampliada mediante bibliotecas o paquetes desarrollados por la comunidad de programadores.

Para programar en R, puede utilizarse una interfaz de línea de comandos y también ambientes de desarrollo integrados (IDE, integrated development environment) como Jupyter o RStudio.

Funciones, bibliotecas y paquetes

R, al igual que otros lenguajes de programación, estructura su funcionalidad por medio de segmentos de código llamados funciones. Cada función realiza una tarea específica como, por ejemplo, un cálculo matemático. Todas las funciones tienen un nombre y un conjunto de parámetros que especifican los datos de entrada que procesa la función. Los parámetros se escriben entre paréntesis redondos (()) y estos siempre deben incluirse, aún en el caso de que la función no tenga ningún parámetro. Si la función tiene varios parámetros, deben separarse mediante comas (,).

Por ejemplo, la función print() recibe como parámetro un valor (ej. un texto o un número) para imprimirlo en la pantalla. En el siguiente fragmento de código en R, se utiliza print() para imprimir la hilera “Hola mundo”. Nótese el uso del símbolo # para comentarios (i.e. texto que no es código ejecutable).

# Impresión de una hilera de carácteres
print("Hola mundo")
## [1] "Hola mundo"

La función mean() retorna la media aritmética del parámetro de entrada. En el siguiente ejemplo, se calcula la media de los números de un vector creado a su vez con la función c().

# Media aritmética
mean(c(2, 4, 5, 9))
## [1] 5

La función getwd() (get working directory) retorna la ruta del directorio de trabajo de la sesión actual de R. Este es el directorio en el cual R espera encontrar, por ejemplo, archivos de datos.

# Consultar directorio de trabajo
getwd()
## [1] "/home/mfvargas/geogrocesamiento-2020i/lecciones/leccion-04-r"

La función setwd() (set working directory) establece la ruta del directorio de trabajo de la sesión actual de R. Como parámetro, recibe una hilera de texto con la ruta.

# Establecer directorio de trabajo (la ruta debe existir)
# setwd("/home/mfvargas/geogrocesamiento-2020i/lecciones/leccion-04-r")

Los parámetros de las funciones tienen nombres que pueden especificarse en caso de ser necesario. En el siguiente ejemplo, se utilizan los nombres de los parámetros x, xlab y ylab de la función plot() para especificar la fuente de datos y las etiquetas de los ejes x e y de un gráfico.

# Gráfico con etiquetas en los ejes x e y
plot(
  x=cars, 
  xlab="Velocidad", 
  ylab="Distancia"
)

Para obtener ayuda de una función desde la línea de comandos de R, puede utilizarse un signo de pregunta (?) seguido del nombre de la función. Por ejemplo:

# Ayuda de la función setwd()
?setwd

También puede obtenerse ayuda sobre una función en los buscadores de Internet (ej. Google), además de ejemplos y otros materiales de apoyo.

Las funciones de R se agrupan en conjuntos llamados bibliotecas, las cuales se distribuyen en paquetes. Para utilizar un paquete, este debe cargarse primero con la función require().

# Carga del paquete stats
require(stats)

Tipos de datos, objetos y variables

R puede trabajar con varios tipos de datos, entre los que están números, carácteres (i.e. textos) y booleanos (o lógicos). También utiliza tipos más complejos, como vectores y matrices.

Como se mencionó anteriormente, R es un lenguaje de programación orientado a objetos. Un objeto es una entidad que tiene asociadas propiedades y métodos para manipular esas propiedades. Un objeto puede ser, por ejemplo, un número, un texto, un vector o una matriz.

Hay muchas formas de crear objetos en R. Una de las más sencillas es con los operadores de asignación. Estos son = y <-. Las siguientes sentencias crean un número, un texto y un vector.

# Número
x <- 10

# Hilera de carácteres
nombre <- 'Manuel'

# Vector de hileras de carácteres
dias <- c('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado')

Tanto x, como nombre como dias son variables. Una variable es una etiqueta que se le asigna a un valor (o a un objeto). Una variable tiene un nombre que debe comenzar con una letra.

El tipo de una variable (u objeto) puede consultarse con la función typeof(). Por ejemplo:

print(typeof(x))
## [1] "double"
print(typeof(nombre))
## [1] "character"

A continuación, se describen con más detalle algunos de los tipos de datos utilizados en el lenguaje R.

Números

Pueden ser enteros o fracciones. Se utilizan en operaciones aritméticas (ej. suma, resta, multiplicación, división).

# Números enteros
x <- 10
y <- 20

# Suma
print(x + y)
## [1] 30
# Números decimales
x <- 0.5
y <- 3.14

# Multiplicación
print(x * y)
## [1] 1,57

Carácteres

Se utilizan para representar textos. Deben estar encerrados entre comillas simples 'o dobles ".

# Hileras de carácteres
nombre <- "María"
apellido <- "Pérez"

# Concatenación
print(paste(nombre, apellido))
## [1] "María Pérez"

Booleanos

Los objetos booleanos (también llamados lógicos) tienen dos posibles valores: verdadero (TRUE) o falso (FALSE).

# Variable booleana
b = 1 < 2

print(b)
## [1] TRUE
# Variable booleana
c = 1 > 2

print(c)
## [1] FALSE

Las expresiones booleanas pueden combinarse con operadores como:

  • & (Y, en inglés AND)
  • | (O, en inglés OR)
  • ! (NO, en inglés NOT)
# Operador lógico AND
print((1 < 2) & (3 < 4))
## [1] TRUE
# Operador lógico OR
print((2 + 2 == 5) | (20 <= 10))
## [1] FALSE
# Operador lógico NOT
print(!(2 + 2 == 5))
## [1] TRUE

Vectores

Un vector es una estructura de una dimensión que combina objetos del mismo tipo. Se crean con la función c() (del inglés combine), como en los siguientes ejemplos:

# Definición de un vector de números
a = c(1, 2, 3, 4, 5)

print(a)
## [1] 1 2 3 4 5
# Definición de un vector de hileras de carácteres
b = c("Álvaro", "Ana", "Berta", "Bernardo")

print(b)
## [1] "Álvaro"   "Ana"      "Berta"    "Bernardo"

Data Frames

Los data frames son estructuras bidimensionales compuestas por varios vectores, de manera similar a una matriz. Cada vector corresponde una columna de la matriz.

La función data.frame() puede utilizarse para crear un data frame a partir de vectores que serán las columnas del data frame.

# Vector de nombres de países
paises = c("PAN", "CRI", "NIC", "SLV", "HND", "GTM", "BLZ", "DOM")

# Vector de cantidades de habitantes (en millones)
poblaciones = c(4.1, 5.0, 6.2, 6.4, 9.2, 16.9, 0.3, 10.6)

# Creación de un data frame a partir de los dos vectores
ca_poblacion_paises = data.frame(
                        pais = paises, 
                        poblacion = poblaciones
                      )

print(ca_poblacion_paises)
##   pais poblacion
## 1  PAN       4,1
## 2  CRI       5,0
## 3  NIC       6,2
## 4  SLV       6,4
## 5  HND       9,2
## 6  GTM      16,9
## 7  BLZ       0,3
## 8  DOM      10,6

La función summary() proporciona un resumen de los contenidos de un data frame:

# Resumen de los contenidos del data frame
print(summary(ca_poblacion_paises))
##       pais     poblacion     
##  BLZ    :1   Min.   : 0,300  
##  CRI    :1   1st Qu.: 4,775  
##  DOM    :1   Median : 6,300  
##  GTM    :1   Mean   : 7,338  
##  HND    :1   3rd Qu.: 9,550  
##  NIC    :1   Max.   :16,900  
##  (Other):2

Nota: para efectos de pruebas y ejemplos, el interpretador de R incorpora varios conjuntos de datos en la forma de data frames que pueden listarse con la función data(). Para consultar un conjunto en particular, puede utilizarse el operador ? desde la línea de comandos de R (ej. ?cars).

Importación de datos

Por lo general, los datos con los que se trabaja en R provienen de fuentes externas, como archivos, bases de datos o servicios web. A continuación, se estudiarán funciones que permiten importar datos desde algunas de estas fuentes.

La función read.csv()

La función read.csv() importa datos desde un archivo de valores separados por comas (CSV, comma separated values) y los almacena en un data frame. Como parámetro, recibe la ruta del archivo. Si la ruta no es absoluta, se toma como relativa al directorio actual de trabajo.

Ejemplo: casos de Covid-19 en los países centroamericanos y República Dominicana

Los datos usados en este ejemplo están basados en los publicados por el Centro de Coordinación para la Prevención de los Desastres en América Central y República Dominicana (Cepredenac).

# Importación de casos recuperados, fallecidos, activos y confirmados de Covid-19 en los países de Centroamérica
ca_covid19 <- read.csv(file='datos/covid19/casos/ca/ca-covid19.csv')

print(ca_covid19)
##   pais recuperados fallecidos activos confirmados
## 1  BLZ           0          2      16          18
## 2  CRI          67          4     555         626
## 3  GTM          19          5     172         196
## 4  HND           9         35     382         426
## 5  NIC           5          1       3           9
## 6  PAN          75        103    3573        3751
## 7  SLV          30          6     123         159
## 8  DOM         208        189    3217        3614

Ejemplo: índice de movilidad durante la pandemia de Covid-19
Los siguientes ejemplos están basados en el Índice de movilidad de Citymapper, el cual mide la movilidad en varias ciudades del mundo durante la pandemia de Covid-19.

# Carga de los datos de todas las ciudades desde un archivo almacenado en la Web
indice_movilidad <- read.csv(file='https://raw.githubusercontent.com/geoprocesamiento-2020i/datos/master/covid19/movilidad/citymapper/Citymapper_Mobility_Index.csv')
# Resumen
print(summary(indice_movilidad))
##          Date      Amsterdam        Barcelona          Berlin      
##  2020-03-02: 1   Min.   :0,0400   Min.   :0,0200   Min.   :0,0800  
##  2020-03-03: 1   1st Qu.:0,0600   1st Qu.:0,0300   1st Qu.:0,1100  
##  2020-03-04: 1   Median :0,0700   Median :0,0400   Median :0,1300  
##  2020-03-05: 1   Mean   :0,3227   Mean   :0,2902   Mean   :0,3516  
##  2020-03-06: 1   3rd Qu.:0,6000   3rd Qu.:0,4700   3rd Qu.:0,6000  
##  2020-03-07: 1   Max.   :1,1000   Max.   :1,1300   Max.   :1,0300  
##  (Other)   :39                                                     
##    Birmingham         Boston          Brussels       Chicago      
##  Min.   :0,1000   Min.   :0,0400   Min.   :0,05   Min.   :0,0500  
##  1st Qu.:0,1300   1st Qu.:0,0600   1st Qu.:0,07   1st Qu.:0,0700  
##  Median :0,2100   Median :0,0800   Median :0,08   Median :0,0900  
##  Mean   :0,4424   Mean   :0,3038   Mean   :0,34   Mean   :0,3438  
##  3rd Qu.:0,8900   3rd Qu.:0,4900   3rd Qu.:0,68   3rd Qu.:0,6600  
##  Max.   :1,1100   Max.   :1,0200   Max.   :1,13   Max.   :1,0900  
##                                                                   
##    Copenhagen        Hamburg         Hong.Kong         Istanbul     
##  Min.   :0,0700   Min.   :0,0900   Min.   :0,2600   Min.   :0,0400  
##  1st Qu.:0,0900   1st Qu.:0,1200   1st Qu.:0,3400   1st Qu.:0,0800  
##  Median :0,1100   Median :0,1500   Median :0,4200   Median :0,1000  
##  Mean   :0,3173   Mean   :0,3356   Mean   :0,4256   Mean   :0,4187  
##  3rd Qu.:0,3100   3rd Qu.:0,5900   3rd Qu.:0,5200   3rd Qu.:0,8900  
##  Max.   :1,1100   Max.   :0,9400   Max.   :0,5600   Max.   :1,4400  
##                                                                     
##      Lisbon           London        Los.Angeles          Lyon       
##  Min.   :0,0800   Min.   :0,0700   Min.   :0,0600   Min.   :0,0300  
##  1st Qu.:0,1000   1st Qu.:0,0900   1st Qu.:0,1000   1st Qu.:0,0400  
##  Median :0,1200   Median :0,1500   Median :0,1300   Median :0,0400  
##  Mean   :0,4118   Mean   :0,3924   Mean   :0,3593   Mean   :0,2964  
##  3rd Qu.:0,6800   3rd Qu.:0,7500   3rd Qu.:0,5600   3rd Qu.:0,7500  
##  Max.   :1,2800   Max.   :1,0200   Max.   :1,1000   Max.   :0,9900  
##                                                                     
##      Madrid         Manchester       Melbourne      Mexico.City    
##  Min.   :0,0300   Min.   :0,0800   Min.   :0,090   Min.   :0,0700  
##  1st Qu.:0,0400   1st Qu.:0,1000   1st Qu.:0,140   1st Qu.:0,1300  
##  Median :0,0400   Median :0,1600   Median :0,250   Median :0,2800  
##  Mean   :0,2587   Mean   :0,4189   Mean   :0,484   Mean   :0,4711  
##  3rd Qu.:0,2300   3rd Qu.:0,8800   3rd Qu.:0,930   3rd Qu.:0,9100  
##  Max.   :1,0700   Max.   :1,0800   Max.   :1,140   Max.   :1,3200  
##                                                                    
##      Milan             Monaco          Montréal          Moscow      
##  Min.   :0,02000   Min.   :0,0200   Min.   :0,0800   Min.   :0,1200  
##  1st Qu.:0,03000   1st Qu.:0,0500   1st Qu.:0,1100   1st Qu.:0,1600  
##  Median :0,04000   Median :0,0700   Median :0,1600   Median :0,5400  
##  Mean   :0,09711   Mean   :0,2391   Mean   :0,4113   Mean   :0,5487  
##  3rd Qu.:0,07000   3rd Qu.:0,5000   3rd Qu.:0,8700   3rd Qu.:0,9500  
##  Max.   :0,45000   Max.   :0,8200   Max.   :1,1400   Max.   :1,1700  
##                                                                      
##  New.York.City        Paris         Philadelphia     Rhine.Ruhr    
##  Min.   :0,0500   Min.   :0,0400   Min.   :0,100   Min.   :0,1100  
##  1st Qu.:0,0600   1st Qu.:0,0500   1st Qu.:0,120   1st Qu.:0,1500  
##  Median :0,0800   Median :0,0600   Median :0,150   Median :0,1600  
##  Mean   :0,3233   Mean   :0,3151   Mean   :0,358   Mean   :0,3298  
##  3rd Qu.:0,5400   3rd Qu.:0,7400   3rd Qu.:0,570   3rd Qu.:0,5200  
##  Max.   :1,0400   Max.   :1,0100   Max.   :1,030   Max.   :0,8600  
##                                                                    
##       Rome        San.Francisco       Seattle           Seoul       
##  Min.   :0,0300   Min.   :0,0400   Min.   :0,0500   Min.   :0,3400  
##  1st Qu.:0,0400   1st Qu.:0,0600   1st Qu.:0,0800   1st Qu.:0,3600  
##  Median :0,0500   Median :0,0800   Median :0,1200   Median :0,3800  
##  Mean   :0,1744   Mean   :0,2871   Mean   :0,2669   Mean   :0,4007  
##  3rd Qu.:0,0800   3rd Qu.:0,4900   3rd Qu.:0,4200   3rd Qu.:0,4300  
##  Max.   :0,9700   Max.   :1,0000   Max.   :0,8300   Max.   :0,5200  
##                                                                     
##    Singapore      St..Petersburg     Stockholm         Sydney      
##  Min.   :0,1200   Min.   :0,1700   Min.   :0,230   Min.   :0,1000  
##  1st Qu.:0,5000   1st Qu.:0,2800   1st Qu.:0,280   1st Qu.:0,1400  
##  Median :0,6300   Median :0,6500   Median :0,300   Median :0,2300  
##  Mean   :0,6013   Mean   :0,6356   Mean   :0,476   Mean   :0,4813  
##  3rd Qu.:0,8400   3rd Qu.:0,9800   3rd Qu.:0,660   3rd Qu.:0,9200  
##  Max.   :0,9500   Max.   :1,2500   Max.   :1,060   Max.   :1,2100  
##                                                                    
##    São.Paulo          Tokyo          Toronto         Vancouver     
##  Min.   :0,0800   Min.   :0,050   Min.   :0,1200   Min.   :0,1300  
##  1st Qu.:0,1200   1st Qu.:0,090   1st Qu.:0,1600   1st Qu.:0,1500  
##  Median :0,1400   Median :0,180   Median :0,2200   Median :0,1800  
##  Mean   :0,4473   Mean   :0,278   Mean   :0,4298   Mean   :0,4204  
##  3rd Qu.:0,9600   3rd Qu.:0,460   3rd Qu.:0,7800   3rd Qu.:0,7600  
##  Max.   :1,2000   Max.   :0,630   Max.   :1,0900   Max.   :1,0200  
##                                                                    
##      Vienna       Washington.DC   
##  Min.   :0,0300   Min.   :0,0400  
##  1st Qu.:0,0500   1st Qu.:0,0500  
##  Median :0,0600   Median :0,0800  
##  Mean   :0,3447   Mean   :0,3089  
##  3rd Qu.:0,5100   3rd Qu.:0,5400  
##  Max.   :1,3400   Max.   :1,0200  
## 

Para visualizar mejor el data frame, es posible imprimir filas o columnas específicas:

# Primera fila (2020-03-02) de las primeras cinco ciudades
print(indice_movilidad[c(1), c(1, 2, 3, 4, 5, 6)])
##         Date Amsterdam Barcelona Berlin Birmingham Boston
## 1 2020-03-02       1,1      1,13   1,03          1   0,97
# Todas las filas de las columnas 1 (Date), 3 (Barcelona), 4 (Berlín), 20 (México DF), 21 (Milán) y 32 (Seúl)
print(indice_movilidad[, c(1, 3, 4, 20, 21, 32)])
##          Date Barcelona Berlin Mexico.City Milan Seoul
## 1  2020-03-02      1,13   1,03        1,14  0,45  0,52
## 2  2020-03-03      1,05   0,94        1,11  0,44  0,51
## 3  2020-03-04      1,05   0,93        1,09  0,43  0,48
## 4  2020-03-05      1,06   0,92        1,08  0,39  0,46
## 5  2020-03-06      1,05   0,92        1,09  0,37  0,46
## 6  2020-03-07      1,10   0,92        1,15  0,34  0,43
## 7  2020-03-08      1,07   0,97        1,32  0,23  0,51
## 8  2020-03-09      1,04   0,94        0,74  0,19  0,46
## 9  2020-03-10      0,92   0,83        0,95  0,13  0,41
## 10 2020-03-11      0,86   0,86        1,10  0,10  0,43
## 11 2020-03-12      0,69   0,72        1,02  0,07  0,45
## 12 2020-03-13      0,47   0,60        1,01  0,06  0,41
## 13 2020-03-14      0,24   0,54        0,91  0,05  0,40
## 14 2020-03-15      0,16   0,45        0,82  0,05  0,38
## 15 2020-03-16      0,12   0,41        0,43  0,07  0,44
## 16 2020-03-17      0,08   0,28        0,62  0,06  0,40
## 17 2020-03-18      0,06   0,26        0,53  0,05  0,41
## 18 2020-03-19      0,05   0,18        0,48  0,04  0,36
## 19 2020-03-20      0,05   0,13        0,42  0,04  0,44
## 20 2020-03-21      0,04   0,12        0,31  0,03  0,39
## 21 2020-03-22      0,03   0,11        0,28  0,03  0,38
## 22 2020-03-23      0,05   0,13        0,30  0,04  0,36
## 23 2020-03-24      0,04   0,12        0,29  0,04  0,36
## 24 2020-03-25      0,04   0,12        0,23  0,03  0,37
## 25 2020-03-26      0,03   0,11        0,21  0,03  0,36
## 26 2020-03-27      0,03   0,10        0,18  0,03  0,37
## 27 2020-03-28      0,03   0,10        0,16  0,02  0,36
## 28 2020-03-29      0,03   0,08        0,15  0,03  0,35
## 29 2020-03-30      0,04   0,12        0,18  0,04  0,38
## 30 2020-03-31      0,03   0,12        0,17  0,03  0,36
## 31 2020-04-01      0,03   0,12        0,15  0,03  0,37
## 32 2020-04-02      0,03   0,11        0,14  0,03  0,37
## 33 2020-04-03      0,02   0,10        0,13  0,03  0,42
## 34 2020-04-04      0,02   0,10        0,11  0,03  0,39
## 35 2020-04-05      0,02   0,11        0,11  0,03  0,34
## 36 2020-04-06      0,03   0,14        0,13  0,04  0,36
## 37 2020-04-07      0,03   0,12        0,13  0,03  0,37
## 38 2020-04-08      0,03   0,14        0,13  0,03  0,36
## 39 2020-04-09      0,03   0,13        0,09  0,03  0,38
## 40 2020-04-10      0,02   0,10        0,07  0,03  0,41
## 41 2020-04-11      0,03   0,11        0,08  0,03  0,38
## 42 2020-04-12      0,02   0,14        0,10  0,02  0,34
## 43 2020-04-13      0,03   0,09        0,13  0,03  0,36
## 44 2020-04-14      0,04   0,12        0,12  0,04  0,40
## 45 2020-04-15      0,04   0,13        0,11  0,03  0,38

Graficación

Una de las principales fortalezas de R es su capacidad para generar gráficos estadísticos. A continuación, se detallan algunas de las principales funciones de graficación.

La función barplot()

barplot() genera un gráfico de barras. Este tipo de gráfico se utiliza para mostrar la relación entre una variable categórica y una variable numérica. Cada valor de la variable categórica se representa mediante una barra y el tamaño de la barra corresponde al valor correspondiente de la variable numérica.

Ejemplo: población de países centroamericanos
En los siguientes ejemplos, se grafican las cantidades de habitantes de los países centroamericanos. El gráfico resultante se mejora paulatinamente con las opciones que ofrece la función barplot().

Primero, se repiten los comandos para construir un data frame a partir de dos vectores.

# Vector de nombres de países
paises = c("PAN", "CRI", "NIC", "SLV", "HND", "GTM", "BLZ", "DOM")

# Vector de cantidades de habitantes (en millones)
poblaciones = c(4.1, 5.0, 6.2, 6.4, 9.2, 16.9, 0.3, 10.6)

# Creación de un data frame a partir de los dos vectores
ca_poblacion_paises = data.frame(
                        pais = paises, 
                        poblacion = poblaciones
                      )

print(ca_poblacion_paises)
##   pais poblacion
## 1  PAN       4,1
## 2  CRI       5,0
## 3  NIC       6,2
## 4  SLV       6,4
## 5  HND       9,2
## 6  GTM      16,9
## 7  BLZ       0,3
## 8  DOM      10,6

Gráfico básico
(Note la notación con $ para especificar columnas)

barplot(height=ca_poblacion_paises$poblacion)

Seguidamente, se ordenan los valores de población con la función order() y se genera un nuevo data frame.

# Ordenar de mayor a menor
poblacion.ordenado <- order(ca_poblacion_paises$poblacion, decreasing=TRUE)

# Nuevo data frame ordenado
ca_poblacion_paises.poblacion <- ca_poblacion_paises[poblacion.ordenado,]

Gráfico con título y etiquetas

barplot(
  height=ca_poblacion_paises.poblacion$poblacion, 
  names.arg=ca_poblacion_paises.poblacion$pais, 
  xlab="País", 
  ylab="Millones de habitantes", 
  main="Población de los países centroamericanos y República Dominicana"
)

Gráfico con barras horizontales

barplot(
  height=ca_poblacion_paises.poblacion$poblacion, 
  names.arg=ca_poblacion_paises.poblacion$pais, 
  xlab="Millones de habitantes", 
  ylab="País",   
  main="Población de los países centroamericanos y República Dominicana", 
  horiz=TRUE
)

Ejemplo: casos de Covid-19 en los países centroamericanos y República Dominicana
En este caso, el archivo CSV se carga desde la Web en un data frame:

# Importación de casos recuperados, fallecidos, activos y confirmados de Covid-19 en los países de Centroamérica
ca_covid19 <- read.csv(file='https://raw.githubusercontent.com/geoprocesamiento-2020i/datos/master/covid19/casos/ca/ca-covid19.csv')

print(ca_covid19)
##   pais recuperados fallecidos activos confirmados
## 1  BLZ           0          2      16          18
## 2  CRI          67          4     555         626
## 3  GTM          19          5     172         196
## 4  HND           9         35     382         426
## 5  NIC           5          1       3           9
## 6  PAN          75        103    3573        3751
## 7  SLV          30          6     123         159
## 8  DOM         208        189    3217        3614

Ordenamiento según cantidad de casos confirmados

# Ordenar de mayor a menor
confirmados.ordenado <- order(ca_covid19$confirmados, decreasing=TRUE)

# Nuevo data frame ordenado
ca_covid19.confirmados <- ca_covid19[confirmados.ordenado,]

Gráfico de casos confirmados

barplot(
  height=ca_covid19.confirmados$confirmados, 
  names.arg=ca_covid19.confirmados$pais, 
  xlab="País", 
  ylab="Casos confirmados", 
  main="Casos confirmados de Covid-19 en países centroamericanos y DOM"
)

La función plot()