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()
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
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")