# install.packages("RSQLite")
library(RSQLite)
# install.packages("dplyr")
library(dplyr)
Ejercicio de bases de datos
Introducción
En este ejercicio aprenderemos a trabajar con bases de datos desde
R
.Vamos a trabajar con R, Rstudio (ahora llamado posit), y utilizaremos al menos los paquete
RSQLite
ydplyr
.El material utilizado en este manual puede descargarse aquí y este mismo ejercicio en formato .qmd puede descargarse desde aquí.
Flujo de Trabajo
- Instalar y cargar paquetes
- Crear conexión con base de datos
- Montar base de datos
- Realizar consultas
- Cerrar base de datos
Instalar y cargar paquetes
Crear conexión con base de datos
= dbConnect(RSQLite::SQLite(), dbname = "material/sql.sqlite")
con dbListTables(con)
Montar base de datos
<- read.table("material/ifn3p18_Convertida_Tabla_PCParcelas.txt", sep = ";", header = TRUE)
parcelas <- read.table("material/ifn3p18_Convertida_Tabla_PCMayores.txt", sep = ";", header = TRUE)
mayores <- read.table("material/ifn3p18_Convertida_Tabla_PCMatorral.txt", sep = ";", header = TRUE)
matorral <- read.table("material/ifn3p18_Convertida_Tabla_PCRegenera.txt", sep = ";", header = TRUE)
regenera <- read.table("material/especies_ANEXO12.txt", sep = ";", header = TRUE)
arboles <- read.table("material/especies_ANEXO13.txt", sep = ";", header = TRUE)
arbustos
dbWriteTable(con, "parcelas", parcelas)
dbWriteTable(con, "mayores", mayores)
dbWriteTable(con, "matorral", matorral)
dbWriteTable(con, "regenera", regenera)
dbWriteTable(con, "arboles", arboles)
dbWriteTable(con, "arbustos", arbustos)
dbListTables(con)
dbListFields(con, "parcelas")
dbReadTable(con, "parcelas")
Realizar consultas
Una vez creada la base de datos podemos realizar consultas sobre ella aplicando el lenguaje SQL.
Por ejemplo, quiero conocer cuáles qué especies de árboles se han observado por parcela.
<- dbSendQuery(con,
query "SELECT DISTINCT Estadillo, Especie
FROM mayores")
<- dbFetch(query)
coexistentes dbClearResult(query)
O quiero extraer el diámetro medio de todas las encinas muestreadas y el estadillo al que pertenecen.
<- dbSendQuery(con,
query "SELECT Estadillo, Especie, (Dn1 + Dn2/2) AS Dn_avg
FROM mayores
WHERE Especie = 45")
<- dbFetch(query)
diam_encinas dbClearResult(query)
Y también puedo realizar consultas más complejas. Por ejemplo, quiero conocer cuáles son las especies acompañantes a las encinas adultas en cada parcela.
<- dbSendQuery(con,
query "SELECT DISTINCT matorral.Especie, arbustos.Nombre
FROM matorral
INNER JOIN mayores ON matorral.Estadillo=mayores.Estadillo
INNER JOIN arboles ON mayores.Especie = arboles.Codigo
INNER JOIN arbustos ON matorral.Especie = arbustos.Codigo
WHERE arboles.Nombre = 'Quercus ilex'")
<- dbFetch(query)
acomp_encinas dbClearResult(query)
Aunque el lenguaje SQL
es el más extendida cuando hablamos de bases de datos, existen otras formas de trabajar con bases de datos que mantienen la misma lógica pero utilizan otras sintáxis.
Por ejemplo, si de nuevo quiero conocer cuáles son las especies acompañantes a las encinas adultas en cada parcela…
<- mayores %>%
acomp_encinas_dplyr left_join(arboles, by = c("Especie" = "Codigo")) %>%
filter(Nombre == "Quercus ilex") %>%
select(Estadillo) %>%
distinct() %>%
left_join(matorral, by = c("Estadillo" = "Estadillo")) %>%
left_join(arbustos, by = c("Especie" = "Codigo")) %>%
select(Especie, Nombre) %>%
distinct() %>%
filter(!is.na(Especie))
Cerrar base de datos
EL pqeute RSQLite
requiere cerrar la conexión con la base de datos cuando terminamos de trabajar con ella.
dbDisconnect(con)