Software R

¿Qué es R y cómo instalarlo?

R es un lenguaje de programación y un entorno de software utilizado principalmente para el análisis estadístico, la manipulación de datos y la visualización de gráficos. Es ampliamente utilizado en diversos campos como estadística, ciencia de datos, economía, entre otros. También es una de las herramientas más empleadas en ciencia de datos junto con Python, especialmente por su potencia en análisis estadístico y generación de reportes reproducibles. R es un software libre y de código abierto, lo que significa que cualquiera puede acceder a su código y modificarlo. Para instalar R en tu computadora:

  1. Ingresá a la página oficial de R: https://cran.r-project.org.
  2. En el margen izquierdo hacé clic en CRAN, que está debajo del título Download.
  3. Dentro de los CRAN Mirrors elegí el de Argentina.
  4. En la sección Download and Install R elegí el instalador correspondiente a tu sistema operativo.
  5. Hacé clic en el enlace de descarga y seguí las instrucciones de instalación del instalador.

¿Qué es RStudio y cómo instalarlo?

RStudio es un entorno de desarrollo integrado (IDE) que facilita el uso de R. Aunque se puede trabajar con R sin RStudio, esta herramienta ofrece una interfaz más amigable y muchas funciones adicionales que mejoran la experiencia de programación, como:

  • Una consola de R interactiva.
  • Herramientas de visualización.
  • Soporte para la depuración de código.
  • Facilidades para trabajar con proyectos y archivos.

Para instalar RStudio en tu computadora:

  1. Ingresá al sitio oficial de RStudio: https://posit.co/download/rstudio-desktop/.
  2. Seleccioná la versión del instalador correspondiente a tu sistema operativo.
  3. Hacé clic en el enlace correspondiente y seguí las instrucciones para instalar RStudio. Debés tener R instalado previamente, ya que RStudio depende de R para funcionar.

Una vez instalado, RStudio se puede abrir desde el escritorio o el menú de inicio. La interfaz de RStudio se organiza en cuatro paneles principales:

  1. Script/Editor de código: donde se puede escribir y editar el código R antes de ejecutarlo.
  2. Consola: muestra la salida del código ejecutado y permite escribir comandos directamente.
  3. Panel de entorno/objetos: donde se gestionan los objetos (como variables y datos) creados durante la sesión.
  4. Panel de archivos, paquetes y figuras: en el que se pueden gestionar archivos de trabajo, instalar y cargar paquetes, así como visualizar los gráficos y figuras generados.

Tip: Si recién empezás, enfocate primero en el script (arriba a la izquierda) y en la consola (abajo a la izquierda). El resto lo vas a ir entendiendo con la práctica.

Ventajas y desventajas de usar R y la interfaz RStudio

Herramienta Ventajas Desventajas
R • Lenguaje especializado en estadística y ciencia de datos.
• Amplia comunidad y recursos gratuitos.
• Visualizaciones de alta calidad (ggplot2, lattice, etc.).
• Muy flexible y extensible.
• Software libre y gratuito.
• Curva de aprendizaje inicial.
• Limitaciones con grandes volúmenes de datos (memoria RAM).
• Menor velocidad en tareas intensivas comparado con otros lenguajes.
RStudio • Entorno amigable para programar en R.
• Buena integración con R Markdown, Shiny, Git, Python, etc.
• Organización del código y ayuda en la depuración.
• Todo el entorno de trabajo accesible en una misma interfaz.
• Requiere tener R instalado previamente.
• Puede ser pesado en equipos con pocos recursos.

Elementos básicos de R

Objetos en R

En programación, un objeto es un contenedor que almacena información. R es un lenguaje orientado a objetos, lo que significa que todos los elementos que manipula (valores, estructuras de datos, variables, funciones) son objetos. Lo importante es que un objeto reúne todo lo necesario para representar una entidad o concepto.

Cada objeto tiene características llamadas atributos. Algunos de los atributos más comunes son:

  • Nombre: es el identificador del objeto. Puede contener letras, números y guiones bajos, pero no debe comenzar con un número ni contener espacios. R distingue entre mayúsculas y minúsculas.
  • Tipo: se refiere al tipo de dato que contiene el objeto (numérico, carácter, lógico, etc.). Se puede consultar con class().
  • Clase: indica la estructura y el comportamiento del objeto (vector, data.frame, function, etc.).
  • Largo: representa la cantidad de elementos que contiene el objeto. Se consulta con length().

Caracteres especiales

Antes de comenzar a crear objetos, es útil conocer algunos caracteres especiales utilizados frecuentemente en R:

Caracteres especiales en R y sus funciones
Símbolo Función
# Hacer un comentario
<- Asignar un valor a una variable (equivalente a =)
$ Acceder a una columna de un data frame
[ ] Acceder a elementos de un vector, matriz o data frame
[[ ]] Acceder a un elemento dentro de una lista
( ) Definir los parámetros de una función
, Separar los parámetros de una función
: Generar secuencias de números enteros

Ahora sí, creemos algunos objetos:

A = 3         # también se puede usar <- para asignar
A             # muestra el contenido del objeto
## [1] 3
class(A)      # clase del objeto
## [1] "numeric"
length(A)     # largo del objeto
## [1] 1
B = 1:10
B
##  [1]  1  2  3  4  5  6  7  8  9 10
class(B)
## [1] "integer"
length(B)
## [1] 10
C <- c("Mujer", "Hombre", "Mujer")
C
## [1] "Mujer"  "Hombre" "Mujer"
class(C)
## [1] "character"
length(C)
## [1] 3

Estructuras de datos

Existen cinco estructuras de datos básicos en R:

  • Vector: permite almacenar datos de un único tipo (numérico, carácter, lógico, etc.). Se crea con la función c(). Suele utilizarse para series de datos simples (e.g., edades).
  • Factor: se utiliza para almacenar datos categóricos, que pueden ser nominales (sin orden inherente) u ordinales (con jerarquía). Se definen con la función factor(), permitiendo asignar niveles y etiquetas. Suele utilizarse para variables cualitativas (sexo, región).
  • Matriz: es una estructura bidimensional con filas y columnas, pero con la restricción de que todos los elementos deben ser del mismo tipo. Se crea con matrix(), y se pueden acceder a sus elementos mediante índices de fila y columna. Generalmente se utiliza para datos numéricos organizados (e.g., calificaciones por materia).
  • Data Frame: es el tipo de objeto más común para almacenar datos en R. Se organiza en filas y columnas, donde cada fila representa una unidad de análisis y cada columna una variable. A diferencia de las matrices, puede contener diferentes tipos de datos en distintas columnas. Se crea con data.frame(). Es la estructura de datos utilizada para bases de datos de encuestas y censos, y es sobre la cual vamos a centrar el curso.
  • Lista: estructura de datos más flexible que permite almacenar elementos de distintos tipos y tamaños dentro de un mismo objeto. Se utiliza para agrupar objetos heterogéneos, como vectores, matrices, data frames y otras listas. Se define con list(), y se utiliza para resultados de modelos u otras estructuras complejas.

Data Frames

Para crear un data frame utilizamos la función data.frame:

datos=data.frame(Sexo = c("Mujer", "Hombre", "Mujer", "Mujer", "Hombre"),
                 Edad = c(33, 44, 30, 40, 27),
                 Ciudad = c("Buenos Aires", "Santa Fe", "Paraná", "Santa Fe","Rosario"))
datos
##     Sexo Edad       Ciudad
## 1  Mujer   33 Buenos Aires
## 2 Hombre   44     Santa Fe
## 3  Mujer   30       Paraná
## 4  Mujer   40     Santa Fe
## 5 Hombre   27      Rosario

Para conocer la estructura general de los datos:

str(datos)
## 'data.frame':    5 obs. of  3 variables:
##  $ Sexo  : chr  "Mujer" "Hombre" "Mujer" "Mujer" ...
##  $ Edad  : num  33 44 30 40 27
##  $ Ciudad: chr  "Buenos Aires" "Santa Fe" "Paraná" "Santa Fe" ...

Podemos ver el data.frame en una nueva pestaña con:

View(datos) 

Y observar los primeros registros con:

head(datos) 
##     Sexo Edad       Ciudad
## 1  Mujer   33 Buenos Aires
## 2 Hombre   44     Santa Fe
## 3  Mujer   30       Paraná
## 4  Mujer   40     Santa Fe
## 5 Hombre   27      Rosario

También podemos consultar la dimensión del data frame (cuántas filas -unidades de análisis- y cuántas columnas -variables-) con:

dim(datos)
## [1] 5 3

que nos devuelve la cantidad de filas en el primer número, y la cantidad de columnas en el segundo.

O consultar la cantidad de filas y columnas por separado:

nrow(datos)
## [1] 5
ncol(datos)
## [1] 3

También podemos consultar el nombre de las filas y de las columnas:

rownames(datos)
## [1] "1" "2" "3" "4" "5"
colnames(datos)
## [1] "Sexo"   "Edad"   "Ciudad"

Otra forma de consultar el nombre de las variables:

names(datos)
## [1] "Sexo"   "Edad"   "Ciudad"

Para acceder a una columna específica:

datos$Edad
## [1] 33 44 30 40 27

O también podemos consultarla por su orden de ubicación en el data frame:

datos[,1]
## [1] "Mujer"  "Hombre" "Mujer"  "Mujer"  "Hombre"

Para acceder a una fila específica:

datos[1,]
##    Sexo Edad       Ciudad
## 1 Mujer   33 Buenos Aires

Para acceder al dato cargado en una celda específica:

datos[3,3]
## [1] "Paraná"

Funciones

En R, una función es un conjunto de instrucciones que realiza una tarea específica. Son herramientas fundamentales que nos permiten automatizar cálculos, manipular datos y reutilizar código.

Así como en las hojas de cálculo usamos funciones como =SUMA() o =PROMEDIO(), en R las funciones siguen una estructura similar:

nombre_funcion(argumento1, argumento2, ...)

Algunas funciones tienen argumentos opcionales que nos permiten personalizar su comportamiento. Por ejemplo, la función mean() (para calcular un promedio) tiene un argumento na.rm que, si se establece en TRUE, indica que deben ignorarse los valores ausentes o faltantes (NA).

Uso de funciones base

R incluye muchas funciones predefinidas (o “base”) listas para usar. Algunas de las más comunes son:

  • mean(): calcula el promedio
  • median(): calcula la mediana
  • sum(): suma todos los elementos
  • min(): devuelve el valor mínimo
  • max(): devuelve el valor máximo
  • sd(): calcula el desvío estándar
  • table(): genera una tabla de frecuencias
  • round(): redondea valores
  • seq(): genera secuencias de números
  • rep(): repite elementos

Veamos algunos ejemplos prácticos:

# Creamos un vector con edades
edades <- c(33, 44, 30, 40, 34, 50, 45)

# Promedio de las edades
mean(edades)
## [1] 39.42857
# Suma total
sum(edades)
## [1] 276
# Valor mínimo y máximo
min(edades)
## [1] 30
max(edades)
## [1] 50
# Redondeamos el promedio a 2 decimales
round(mean(edades), 2)
## [1] 39.43
# Frecuencia de los valores en un vector
sexo <- c("Mujer", "Hombre", "Mujer", "Mujer", "Hombre")
table(sexo)
## sexo
## Hombre  Mujer 
##      2      3
# Vector con un valor NA
edades2 <- c(33, 44, 30, NA, 34, 50, 45)

# Esto devuelve NA porque hay un dato faltante
mean(edades2)
## [1] NA
# Esto calcula el promedio ignorando el NA
mean(edades2, na.rm = TRUE)
## [1] 39.33333

Creación de funciones simples

Además de usar funciones preexistentes, también podemos crear nuestras propias funciones. Esto es útil cuando queremos realizar una operación varias veces o encapsular una lógica para que sea más clara y reutilizable.

La estructura básica es:

nombre_funcion <- function(argumento1, argumento2, ...) {
  # instrucciones que ejecuta la función
  resultado <- ... # se puede asignar un resultado
  return(resultado) # devuelve el resultado
}

Por ejemplo, supongamos que queremos crear una función que calcule el doble de un número:

doble <- function(x) {
  resultado <- x * 2
  return(resultado)
}

# Usamos la función
doble(5)
## [1] 10
doble(10)
## [1] 20

También podemos combinar funciones dentro de otras funciones. Por ejemplo, una función que calcule el promedio de un vector y lo redondee a un decimal:

promedio_redondeado <- function(x) {
  promedio <- mean(x, na.rm = TRUE)
  return(round(promedio, 1))
}

# Probamos con un vector
promedio_redondeado(edades2)
## [1] 39.3

A diferencia de mean() o median(), R no incluye una función base para calcular la moda, es decir, el valor (o los valores) que más se repiten en un conjunto de datos.

Sin embargo, podemos crear nuestra propia función para hacerlo. A continuación, te mostramos una versión sencilla que:

  • Cuenta cuántas veces aparece cada valor usando table(),
  • Identifica el valor o los valores más frecuentes,
  • Si todos los valores aparecen con la misma frecuencia, devuelve "No hay moda".
moda <- function(x) {
  freqs <- table(x)
  max_freq <- max(freqs)
  if (sum(freqs == max_freq) == length(freqs)) {
    return("No hay moda")
  } else {
    return(names(freqs[freqs == max_freq]))
  }
}

Veamos algunos ejemplos de uso:

moda(c(1, 2, 2, 3, 4, 2))   
## [1] "2"
moda(c(1, 1, 2, 2, 3, 3))   
## [1] "No hay moda"
moda(c("rojo", "azul", "rojo", "verde", "rojo"))  
## [1] "rojo"

Esta función puede aplicarse tanto a vectores numéricos como a categóricos (por ejemplo, nombres de ciudades, colores, respuestas, etc.).

Librerías

¿Cómo instalar nuevos paquetes?

En R los paquetes son colecciones de funciones y datos que amplían la funcionalidad del lenguaje R base. Para instalar un nuevo paquete debe escribirse el siguiente comando en la consola de RStudio:

install.packages("nombre_del_paquete")

Y luego, para cargar el paquete y comenzar a usarlo, el siguiente:

library("nombre_del_paquete")

Esto hace que las funciones del paquete estén disponibles en tu sesión de trabajo.

¿Qué paquetes instalar para este curso?

  • tidyverse: Conjunto de paquetes para manipulación, visualización y modelado de datos en R, incluyendo ggplot2, dplyr, tidyr y stringr.

  • janitor: Facilita la limpieza y el formato de datos, con funciones para nombres de columnas consistentes y manejo de tablas.

  • ggstats: Extiende ggplot2 con visualizaciones estadísticas que incluyen pruebas de hipótesis y anotaciones automáticas.

  • scales: Proporciona escalas adicionales para ggplot2, facilitando ajustes en colores, ejes y transparencias.

install.packages("tidyverse")
install.packages("janitor")
install.packages("ggstats")
install.packages("scales")

Recordar que antes de comenzar a trabajar, debemos cargar los paquetes con la función library o seleccionando los mismos en la pestaña Packages del panel inferior derecho.

Paquetes útiles para trabajar con datos oficiales

Existen algunos paquetes de R que permiten acceder, descargar y manipular bases de datos públicas y oficiales, tanto a nivel nacional como internacional. Estos recursos son especialmente útiles para el análisis de datos en ciencias sociales, economía, salud pública, entre otras áreas.

Algunos de ellos son:

  • eph: Encuesta Permanente de Hogares. Facilita el acceso a los microdatos de la EPH publicados por el INDEC. Permite descargar datos de distintos trimestres y años, y ofrece funciones para limpiarlos y procesarlos fácilmente.
library(eph)

# Descargar datos del tercer trimestre de 2023
datos_eph <- get_microdata(year = 2023, trimester = 3)
head(datos_eph)
## # A tibble: 6 × 177
##   CODUSU     ANO4 TRIMESTRE NRO_HOGAR COMPONENTE   H15 REGION MAS_500 AGLOMERADO
##   <chr>     <int>     <int>     <int>      <int> <int>  <int> <chr>        <int>
## 1 TQRMNOPS…  2023         3         1          5     1     41 N                8
## 2 TQSMNORW…  2023         3         1          1     1     41 N                8
## 3 TQSMNORW…  2023         3         1          3     1     41 N                8
## 4 TQSMNORW…  2023         3         1          2     1     41 N                8
## 5 TQRMNOSQ…  2023         3         1          1     1     43 N               36
## 6 TQRMNOSQ…  2023         3         1          2     1     43 N               36
## # ℹ 168 more variables: PONDERA <int>, CH03 <int>, CH04 <int>, CH05 <chr>,
## #   CH06 <int>, CH07 <int>, CH08 <int>, CH09 <int>, CH10 <int>, CH11 <int>,
## #   CH12 <int>, CH13 <int>, CH14 <chr>, CH15 <int>, CH15_COD <int>, CH16 <int>,
## #   CH16_COD <int>, NIVEL_ED <int>, ESTADO <int>, CAT_OCUP <int>,
## #   CAT_INAC <int>, IMPUTA <int>, PP02C1 <int>, PP02C2 <int>, PP02C3 <int>,
## #   PP02C4 <int>, PP02C5 <int>, PP02C6 <int>, PP02C7 <int>, PP02C8 <int>,
## #   PP02E <int>, PP02H <int>, PP02I <int>, PP03C <int>, PP03D <int>, …
  • wbstats: Indicadores del Banco Mundial. Este paquete permite acceder a los indicadores económicos y sociales del Banco Mundial de forma sencilla.
library(wbstats)

# Consultar el PBI de Argentina desde el año 2000
wb_data <- wb_data(indicator = "NY.GDP.MKTP.CD", country = "AR")
head(wb_data)
## # A tibble: 6 × 9
##   iso2c iso3c country    date NY.GDP.MKTP.CD unit  obs_status footnote
##   <chr> <chr> <chr>     <dbl>          <dbl> <chr> <chr>      <chr>   
## 1 AR    ARG   Argentina  1960            NA  <NA>  <NA>       <NA>    
## 2 AR    ARG   Argentina  1961            NA  <NA>  <NA>       <NA>    
## 3 AR    ARG   Argentina  1962   24450604878. <NA>  <NA>       <NA>    
## 4 AR    ARG   Argentina  1963   18272123664. <NA>  <NA>       <NA>    
## 5 AR    ARG   Argentina  1964   25605249382. <NA>  <NA>       <NA>    
## 6 AR    ARG   Argentina  1965   28344705967. <NA>  <NA>       <NA>    
## # ℹ 1 more variable: last_updated <date>

-gapminder: Indicadores globales históricos. Este paquete incluye datos sobre esperanza de vida, ingreso per cápita y población, entre otros, para distintos países entre 1952 y 2007.

library(gapminder)

head(gapminder)
## # 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.

Paquetes con datos públicos de Argentina

Otras librerías que pueden resultar de interés para trabajar con datos públicos y sociales de Argentina son:

  • DatosAbiertosCEP: permite acceder y procesar bases de datos publicadas por el Centro de Estudios para la Producción XXI (CEP XXI), disponibles en el portal de Datos Abiertos de la Secretaría de Industria y Desarrollo Productivo del Ministerio de Economía.

  • PortalHacienda: ofrece una interfaz para consultar la API del Portal de Datos del Ministerio de Hacienda, accediendo a datos presupuestarios y financieros a nivel nacional.

  • presentes: proporciona herramientas para acceder a datos sobre víctimas del terrorismo de Estado en Argentina, incluyendo registros sobre personas detenidas-desaparecidas y asesinadas.

  • polAr: es un conjunto de paquetes con herramientas y datos de política en Argentina. Contiene:

    • geoAr: herramientas y datos espaciales de Argentina.
    • censAr: datos censales de Argentina.
    • legislAr: datos legislativos de Argentina.
    • electorAr: datos electorales de Argentina.
    • opinAr: datos de opinión pública de Argentina.
    • discursAr: discursos políticos de Argentina.
    • polArViz: herramientas para visualizar datos políticos.
  • agromet: ofrece funciones para calcular índices e indicadores climáticos e hidrológicos a partir de datos en formato tidy. También permite visualizar los resultados de forma georreferenciada e incluye información cartográfica.

En https://github.com/pablotis/asombrosos-paquetes-r-latinoamerica?tab=readme-ov-file pueden encontrar detalles sobre funcionalidades y ejemplos.

Operadores, estructuras de control y manejo de errores

Además de funciones, R nos permite controlar el flujo de nuestro código mediante operadores y estructuras condicionales. Estas herramientas nos ayudan a tomar decisiones, repetir acciones y manejar situaciones inesperadas, como errores o datos faltantes.

Operadores básicos

Los operadores permiten realizar comparaciones y filtrar datos. Son esenciales para condicionales, manipulación de datos y evaluación de expresiones. Los principales son:

Operadores aritméticos en R y sus descripciones
Símbolo Descripción
+ Suma
- Resta
* Multiplicación
/ División
^ ó ** Potencia
%% Módulo o resto de una división
%/% División entera
Operadores lógicos en R y sus descripciones
Símbolo Descripción
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
== Igual a (comparación de igualdad)
!= Distinto de (negación de igualdad)
& Y lógico (evaluación elemento a elemento)
| O lógico (evaluación elemento a elemento)
! Negación lógica
any() Si al menos uno cumple la condición
all() Si todos cumplen la condición
x <- 5
y <- 10

x < y       
## [1] TRUE
x == 5      
## [1] TRUE
x != y      
## [1] TRUE
x %% 2 == 0 # ¿es x par?
## [1] FALSE

Estructuras de control

Las estructuras de control permiten tomar decisiones o repetir instrucciones. Las más usadas son if y else, y sirven para ejecutar instrucciones condicionales.

edad <- 17

if (edad >= 18) {
  print("Es mayor de edad")
} else {
  print("Es menor de edad")
}
## [1] "Es menor de edad"

También se puede usar else if para múltiples condiciones:

nota <- 7

if (nota >= 9) {
  print("Excelente")
} else if (nota >= 6) {
  print("Aprobado")
} else {
  print("Desaprobado")
}
## [1] "Aprobado"

for sirve para repetir instrucciones una cantidad definida de veces:

numeros <- c(1, 2, 3)

for (n in numeros) {
  print(n^2)
}
## [1] 1
## [1] 4
## [1] 9

while sirve para repetir instrucciones mientras se cumpla una condición:

contador <- 1

while (contador <= 5) {
  print(contador)
  contador <- contador + 1
}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5

Manejo de errores

Cuando un error ocurre, R generalmente detiene la ejecución. Podemos prevenirlo o controlarlo con funciones como: try() que evita que un error detenga el código y tryCatch() permite capturar y manejar errores de forma más controlada:

x <- c(1, 2, "a")

try(mean(x))  # Intenta ejecutar y sigue aunque haya error
## Warning in mean.default(x): argument is not numeric or logical: returning NA
## [1] NA
seguro_mean <- function(x) {
  tryCatch(
    mean(x),
    warning = function(w) { print("Ocurrió un warning") },
    error = function(e) { print("Ocurrió un error") },
    finally = { print("Listo") }
  )
}

seguro_mean(c(1, 2, "a"))
## [1] "Ocurrió un warning"
## [1] "Listo"