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:
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:
Para instalar RStudio en tu computadora:
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:
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.
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. |
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:
class()
.vector
, data.frame
,
function
, etc.).length()
.Antes de comenzar a crear objetos, es útil conocer algunos caracteres especiales utilizados frecuentemente en R:
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
Existen cinco estructuras de datos básicos en R:
c()
. Suele utilizarse para series de datos simples (e.g.,
edades).factor()
,
permitiendo asignar niveles y etiquetas. Suele utilizarse para variables
cualitativas (sexo, región).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 la
estructura de datos utilizada para bases de datos de encuestas y censos,
y es sobre la cual vamos a centrar el curso.list()
,
y se utiliza para resultados de modelos u otras estructuras
complejas.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á"
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).
R incluye muchas funciones predefinidas (o “base”) listas para usar. Algunas de las más comunes son:
mean()
: calcula el promediomedian()
: calcula la medianasum()
: suma todos los elementosmin()
: devuelve el valor mínimomax()
: devuelve el valor máximosd()
: calcula el desvío estándartable()
: genera una tabla de frecuenciasround()
: redondea valoresseq()
: genera secuencias de númerosrep()
: repite elementosVeamos 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
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:
table()
,"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.).
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.
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.
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.
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.
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.
Los operadores permiten realizar comparaciones y filtrar datos. Son esenciales para condicionales, manipulación de datos y evaluación de expresiones. Los principales son:
Símbolo | Descripción |
---|---|
+ | Suma |
- | Resta |
* | Multiplicación |
/ | División |
^ ó ** | Potencia |
%% | Módulo o resto de una división |
%/% | División entera |
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
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
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"