Instalar y cargar paquetes

Como vamos a trabajar con el paquete tidyverse, tenemos que cargarlo. Si nunca lo has instalado, tendrás que instalarlo primero. ¡Que no se te olviden las comillas!

#install.packages("tidyverse") #¡Recuerda quitar el asterisco para instalarlo tú!
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.2.0     ✔ purrr   0.3.2
## ✔ tibble  2.1.3     ✔ dplyr   1.0.0
## ✔ tidyr   1.1.0     ✔ stringr 1.4.0
## ✔ readr   1.3.1     ✔ forcats 0.4.0
## Warning: package 'tidyr' was built under R version 3.6.2
## Warning: package 'dplyr' was built under R version 3.6.2
## ── Conflicts ────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()

Leer las tablas

Lo siguiente que debemos hacer es leer nuestras tablas. En este caso son dos: una con los ejemplos del corpus y otra con las coordenadas del COSER. Recuerda que para que R encuentre tus archivos, tu working directory debe ser la carpeta en la que estos se encuentran: si no has guardado un proyecto, puedes establecer tu working directory en RStudio en files > more (en la subventana de abajo a la derecha).

coser <- read_delim("Enca_encasa_COSER_12042020_analisis.csv", delim = ";")
## Parsed with column specification:
## cols(
##   ID_juntos = col_double(),
##   ID = col_double(),
##   Provincia = col_character(),
##   Enclave = col_character(),
##   COSERID = col_double(),
##   Forma = col_character()
## )
coords <- read_delim("COSER_coordenadas_enca.csv", delim = "\t")
## Parsed with column specification:
## cols(
##   COSERID = col_double(),
##   Village = col_character(),
##   Province = col_character(),
##   Nombre = col_character(),
##   longitude = col_double(),
##   latitude = col_double()
## )

Comprueba que se han cargado correctamente las tablas ejecutándolas:

coser
## # A tibble: 316 x 6
##    ID_juntos    ID Provincia Enclave               COSERID Forma
##        <dbl> <dbl> <chr>     <chr>                   <dbl> <chr>
##  1         1     4 Albacete  Barrax                    204 ca   
##  2         2     7 Albacete  Barrax                    204 ca   
##  3         3    10 Albacete  Barrax                    204 ca   
##  4         4   352 Alicante  Benimarfull               303 ca   
##  5         5   353 Alicante  Benimarfull               303 ca   
##  6         6   311 Alicante  Salinas                   310 ca   
##  7         7    34 Badajoz   Orellana de la Sierra     723 ca   
##  8         8   332 Badajoz   Orellana de la Sierra     723 ca   
##  9         9   333 Badajoz   Orellana de la Sierra     723 ca   
## 10        10   336 Badajoz   Orellana de la Sierra     723 ca   
## # … with 306 more rows
coords
## # A tibble: 187 x 6
##    COSERID Village     Province Nombre                   longitude latitude
##      <dbl> <chr>       <chr>    <chr>                        <dbl>    <dbl>
##  1     103 El Burgo    Alava    El Burgo, Alava, España     -2.55      42.8
##  2     106 "Leza "     Alava    Leza , Alava, España        -2.63      42.6
##  3     107 "Luzuriaga… Alava    Luzuriaga , Alava, Espa…    -2.39      42.9
##  4     109 Menagaray   Alava    Menagaray, Alava, España    -3.07      43.1
##  5     204 Barrax      Albacete Barrax, Albacete, España    -2.20      39.0
##  6     211 Higueruela  Albacete Higueruela, Albacete, E…    -1.44      39.0
##  7     214 Lietor      Albacete Lietor, Albacete, España    -1.95      38.5
##  8     222 Povedilla   Albacete Povedilla, Albacete, Es…    -2.60      38.7
##  9     303 Benimarfull Alicante Benimarfull, Alicante, …    -0.392     38.8
## 10     304 "Busot "    Alicante Busot , Alicante, España    -0.418     38.5
## # … with 177 more rows

Transformar los datos y juntar las tablas

Ahora que las tenemos, vamos a modificarlas para poder saber cuántos ejemplos de ca y cuántos de casa tenemos en cada enclave, cuántos en total, cuál es el porcentaje de ca… Y todo eso cambiando la distribución de las columnas: queremos una con el número de casos de ca, otra con los de casa, otra con los totales y otra con los porcentajes. Y también queremos las coordenadas de cada punto.

La sintaxis que usamos a continuación es la del tidyverse. El símbolo %>% se llama pipe y permite una sintaxis simplificada y más fácil de leer. La pipe le dice a R que el primer argumento de la función que sigue a la pipe es todo lo anterior: es decir, cada función usada tiene un primer argumento que no rellenamos explicitamente: está omitido y R lo interpreta como “lo anterior”. Eso nos permite una sintaxis “coordinada” en vez de “subordinada”.

El código que aparece a continuacion está explicado en los comentarios.

coser_ca <- coser %>% #Lo primero que hacemos es darle un nombre nuevo (coser_ca) a nuestra tabla nueva. 
                      #Los nombres se asignan con la flecha: la tabla de la que sacamos los datos es coser
  group_by(COSERID) %>% #agrupamos los datos por COSERID: 
                        #todas las operaciones que hagamos se harán sobre esos grupos
  count(Forma) %>% #Contamos el número de ocurrencias por cada valor distinto en la columna "Forma"
  spread(Forma, n) %>%  #Reorganizamos la estructura de las columnas: 
                        #los valores de "Forma" serán ahora nuevas columnas, 
                        #cuyos valores serán los que aparecen en la columna "n"
  mutate(ca = ifelse(is.na(ca), 0, ca), #sustituimos los NA de la columna ca por 0
         casa = ifelse(is.na(casa), 0, casa)) %>% #sustituimos los NA de la columna casa por 0
  mutate(total = ca + casa, #creamos una nueva columna con los totales, 
                            #sumando los valores de las columnas ca y casa
         percentage_ca = ca/total*100) %>% #creamos una nueva columna con el porcentaje de ca
  left_join(coords) #unimos la tabla coords para añadir las coordenadas. 
## Joining, by = "COSERID"
#Usamos un left_join para obtener la información solo de aquellos puntos de los que tenemos datos

Este código puede ser un poco complicado si no estás familiarizado con el tidyverse ni con estas funciones, así que, si te cuesta entenderlo, te aconsejo que lo vayas ejecutando pasito a pasito (suave suavesito) y comprobando el resultado. Para ello recuerda que, si hay una pipe al final de una línea, la consola esperará que siga otra línea de código: debes ejecutar el material que hay antes de cada pipe.

Ahora guardamos la nuestra tabla como un .csv (se guardará en el directorio de trabajo en el que estemos)

write_delim(coser_ca, "coser_ca_video.csv", delim = "\t")