[1] 4
Curso dirigido a Ciencias Sociales y Humanidades
Bastián Olea Herrera
Encuentra todo sobre el curso en este post de mi blog.
Puedes encontrar más contenidos para aprender R en este sitio, y más cosas de R en mi sitio web.
R es un lenguaje de programación enfocado al análisis de datos, las estadísticas y la visualización de datos.

Gratuito
R es un lenguaje de programación abierto y gratuito, y es parte de la comunidad del software libre, así que nunca tendrás que pagar nada!
Amigable
R fue creado para personas de distintas disciplinas, y al centrarse en los datos resulta más intuitivo que otros lenguajes.
Reproducible
La gracia de R es guardar todos los pasos de tu análisis, lo que facilita corregirlos, reutilizarlos para nuevos casos, y compartirlo con otros.

Muestra de algunas aplicaciones, gráficos, tablas, y mapas hechos con R. También algunos trabajos que he hecho.
Veamos algunos casos!
Datos → A → B → C → Resultado
Hacer
Programar
Datos → A → B → C → Resultado
Hacer
Programar
Datos → A → B → C → Resultado
Hacer
Programar
Datos → A → B → C → Resultado
Hacer
Programar


![]()
Archivo de texto .R en el que escribimos nuestro código, en pasos, y siguiendo un orden lógico.
![]()
Es la forma directa de interactuar con R, un comando a la vez, con resultados efímeros.
![]()
Archivo .Rproj que marca nuestro espacio de trabajo: una carpeta específica que reúne todas las piezas de nuestro análisis.
1 Scripts
2 Consola
3 Entorno
4 Archivos
1 Panel de scripts: los archivos de texto con nuestro código. Podemos tener varias pestañas. Ejecutamos el código poniendo el cursor en la línea y presionando control + enter, o el botón Run.
2 Panel de consola: en la consola se imprimen los resultados del código que ejecutamos. También podemos ejecutar código directamente en ella escribiendo y presionando enter.
3 Panel de entorno: acá veremos los objetos que vayamos creando o cargando, que pueden ser números, texto, tablas de datos, funciones, gráficos y otros.
4 Panel de archivos: en este panel podemos navegar los archivos y carpetas de nuestro proyecto y/o computador. La idea es que todo esté dentro del proyecto!


Crear un nuevo script de R

Botón para ejecutar código

Botón para ejecutar todo el script

Configurar paneles de RStudio

Cambiar de proyecto o crear uno nuevo
control + enter.| esté en cualquier lugar de la línea.Lo que podemos hacer siempre va a depender del tipo de cada objeto.
En R existen varios tipos:
Se le llama objeto a cualquier dato, variable, o elemento que tengas en R.
Podemos guardar todo como un objeto.
Para crear un objeto, simplemente le damos un nombre y le asignamos un contenido.
nombre ← contenido
Con el operador de asignación creamos objetos nuevos.
->
Se escribe con:
Windows:

Mac:

Al asignar algo, creamos o modificamos un objeto con el valor que le estamos asignando.
Al ejecutar un objeto, obtenemos su valor.
Podemos usar el objeto creado para lo que queramos.
Crear objetos es como asignar variables, y podemos usar estas variables para llevar a cabo operaciones!
Podemos usar cifras u objetos para compararlas entre sí: la respuesta será TRUE (verdadero) o FALSE (falso).
Las comparaciones son el principio que luego nos permitirá filtrar datos, crear variables, y más!
Los vectores son secuencias de elementos. Un objeto que contiene cero o más datos.
También podemos realizar comparaciones sobre los valores de un vector:
O cualquier operación sobre sus elementos:
función(argumento = 123)
Las funciones también pueden operar sobre vectores de datos.
Es decir que la operación que hace la función se aplica a cada elemento del vector.
Pensemos las funciones como nuestras acciones, y los vectores como las columnas o variables de nuestras bases de datos.
Para cargar datos, tenemos que:
Probemos cargando unos datos!

{readxl} es uno de los paquetes de lectura de planillas Excel. Para escribir un archivo Excel está {writexl}{readr} lee y escribe datos de múltiples formatos (csv, rds, rdata), usualmente de forma más veloz y cómoda{haven} permite cargar archivos SPSS, Stata, y SAS{arrow} es un formato moderno de datos columnares, optimizado para grandes volúmenes y velocidad de carga, y pensado para usarse en distintos softwares{dplyr}|>
head(), tail(), glimpse(): vistazos a los datosselect(): seleccionar columnas o variables de una tablaslice(): extraer filas de una tabla por su posición o distintos criteriospull(): extraer una columna como vectorfilter(): filtrar observaciones en base a condiciones personalizadasdistinct(): filtrar observaciones repetidas en una o más columnascount(): conteo de casos únicos en una o más columnasmutate(): crear columnas entregando valores, funciones sobre columnas, o calculando a partir de otras columnas{dplyr}Para que puedan repasar o guiarse con casos básicos de uso de {dplyr} con datos reales, dejo un par de tutoriales:
El conector o pipe |> (o también %>%) nos permite encadenar varias funciones de forma más legible.
|> %>%
Se escribe con:
Windows:

Mac:

Luego podemos encadenar varias funciones:
Cargamos un conjunto de datos de prueba:
Estos datos son del Ministerio Desarrollo Social y Familia de Chile.
# A tibble: 6 × 3
region comuna personas
<chr> <chr> <dbl>
1 Metropolitana Puente Alto 125235.
2 Metropolitana Santiago 87355.
3 Metropolitana Maipú 86976.
4 Antofagasta Antofagasta 73103.
5 Metropolitana San Bernardo 64276.
6 Valparaíso Valparaíso 60901.
# A tibble: 6 × 10
codigo region comuna personas_proy personas porcentaje limite_inferior
<dbl> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
1 15202 Arica y Parin… Gener… 668 392. 0.586 0.435
2 9116 La Araucanía Saave… 12717 5654. 0.445 0.361
3 9204 La Araucanía Ercil… 8422 3503. 0.416 0.361
4 9106 La Araucanía Galva… 12594 5029. 0.399 0.313
5 8314 Biobío Alto … 6784 2640. 0.389 0.319
6 10306 Los Lagos San J… 7521 2923. 0.389 0.314
# ℹ 3 more variables: limite_superior <dbl>, casen <chr>, tipo_estimacion <chr>
Con mutate() para crear una nueva variable o columna
Le aplicamos mutate() a un data frame conectando los datos a la función con un conector (|> o %>%)
ifelse()Si ocurre esto, entonces retorno lo primero, y si no, lo segundo.
# A tibble: 6 × 3
comuna porcentaje nivel
<chr> <dbl> <chr>
1 Iquique 0.183 baja
2 Alto Hospicio 0.326 alta
3 Pozo Almonte 0.250 baja
4 Camiña 0.223 baja
5 Colchane 0.300 alta
6 Huara 0.386 alta
case_when()Recodificación avanzada con múltiples condicionales.
# A tibble: 6 × 3
comuna porcentaje miles
<chr> <dbl> <chr>
1 Iquique 0.183 baja
2 Alto Hospicio 0.326 alta
3 Pozo Almonte 0.250 media
4 Camiña 0.223 media
5 Colchane 0.300 alta
6 Huara 0.386 alta
Aplicar una función para resumir todas las filas de una tabla en un sólo resultado:

El paquete {stringr} se especializa en texto.
count() para hacer una nube de palabras.noticias <- readr::read_csv2("https://raw.githubusercontent.com/bastianolea/prensa_chile/refs/heads/main/prensa_datos_muestra.csv")
library(tidytext)
palabras <- noticias |>
tidytext::unnest_tokens(input = cuerpo, output = palabra) |> # tokenizar documentos
filter(!palabra %in% stopwords::stopwords("spanish")) # eliminar palabras vacías
palabras_conteo <- palabras_conteo |>
slice_max(n, n = 1000) # sólo las más frecuentes
library(wordcloud2)
palabras_conteo |>
wordcloud2::wordcloud2(backgroundColor = "#23102A", color = "#9F69C7")Podemos usar un modelo de lenguaje (LLM) local o remoto para que R analice los textos y retorne si son positivos, neutros o negativos.
library(ellmer)
chat <- chat_ollama(model = "llama3.2:3b") # elegir modelo
library(mall)
llm_use(chat) # configurar modelo
sentimiento <- noticias |>
slice_sample(n = 10) |>
# extraer sentimiento
llm_sentiment(cuerpo, pred_name = "sentimiento",
options = c("positivo", "neutro", "negativo"))
sentimientoPara cruzar dos tablas de datos
usamos left_join() de {dplyr}

Veamos un ejemplo donde cruzamos dos tablas, la de pobreza y una nueva de clasificación comunal (urbana, mixta, rural según la PNDR), a partir de la columna que tienen en común: codigo
# A tibble: 6 × 5
codigo comuna personas porcentaje clasificacion
<dbl> <chr> <dbl> <dbl> <chr>
1 1101 Iquique 41967. 0.183 Urbana
2 1107 Alto Hospicio 45162. 0.326 Urbana
3 1401 Pozo Almonte 4563. 0.250 Rural
4 1402 Camiña 308. 0.223 Rural
5 1403 Colchane 473. 0.300 Rural
6 1404 Huara 1185. 0.386 Rural
{tidyr} se especializa en transformar la estructura de los datos.sum(valores)) que en columnas (y tener que sumar a+b+c+d…)
pivot_longer()pivot_wider()

Puedes encontrar más datos en mi repositorio de datos sociales, en el banco integrado de datos del Ministerio de Desarrollo, en los datos abiertos del Estado Chile, y muchos más.
Puedes escribirme cualquier duda o comentario por aquí