Documentación del paquete dplyr de Tidyverse: A Grammar of Data Manipulation - dplyr
Sitio web del curso: GF-0604: Procesamiento de datos geográficos.
Datos utilizados durante el curso: Datos del curso GF-0604: Procesamiento de datos geográficos.
Paquetes y datos para ejemplos:
# Paquete para manejo de datos vectoriales
library(sf)
# Paquete de Tidyverse para manipulación de datos
library(dplyr)
# Paquete con conjuntos de datos geoespaciales
library(spData)
Adicionalmente, se utiliza el conjunto de datos de los cantones de Costa Rica publicado en la Infraestructura Nacional de Datos Espaciales de Costa Rica (SNIT), cuyas geometrías se simplifican con la funcion st_simplify(), para así facilitar su manipulación:
# Dirección base del servicio WFS
url_base_wfs <- "http://geos.snitcr.go.cr/be/IGN_5/wfs?"
# La lista de capas puede verse con el método GetCapabilities, en el siguiente URL:
# http://geos.snitcr.go.cr/be/IGN_5/wfs?request=GetCapabilities
# Solicitud de la capa WFS:
solicitud_wfs <- "request=GetFeature&service=WFS&version=2.0.0&typeName=IGN_5:limitecantonal_5k&outputFormat=application/json"
# Recuperación de los datos en un data frame
cr_cantones_crtm05 <- st_read(paste0(url_base_wfs, solicitud_wfs))
## Reading layer `OGRGeoJSON' from data source `http://geos.snitcr.go.cr/be/IGN_5/wfs?request=GetFeature&service=WFS&version=2.0.0&typeName=IGN_5:limitecantonal_5k&outputFormat=application/json' using driver `GeoJSON'
## Simple feature collection with 82 features and 11 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: 156152 ymin: 608833.8 xmax: 658879.5 ymax: 1241118
## projected CRS: CR05 / CRTM05
# Tamaño del conjunto de datos original
print(object.size(cr_cantones_crtm05), units="Mb")
## 19.9 Mb
# Simplificación de las geometrías
cr_cantones_crtm05_simp1 = st_simplify(cr_cantones_crtm05, dTolerance = 1000)
# Transformación al CRS WGS84
cr_cantones = st_transform(cr_cantones_crtm05_simp1, 4326)
# Tamaño del conjunto de datos simplificado
print(object.size(cr_cantones), units="Mb")
## 0.1 Mb
El conjunto de datos de cantones queda almacenado en cr_cantones
. Nótese la disminución del tamaño del conjunto de datos de geometrías simplificadas con respecto al original.
Se les llama atributos a los elementos de datos no espaciales de un conjunto de datos geográficos. Los atributos generalmente son de tipo textual o numérico. Por ejemplo, en el conjunto de datos espaciales correspondiente a los países del mundo, los atributos son los campos correspondientes al nombre del país, la cantidad de habitantes, el producto interno bruto y otros.
Las operaciones con atributos incluyen la creación de subconjuntos (subsetting), la agregación (aggregation) y el cruce de datos (joining) .
El paquete sf define una clase, también llamada sf
, la cual extiende la clase data.frame
del paquete base de R. Los objetos de la clase sf
tienen un registro (o feature) por cada observación y una columna por cada atributo. También tienen una columna especial para almacenar las geométrías (puntos, líneas, polígonos, etc.), la cual generalmente se denomina geometry
o geom
. Esto permite que sf
utilice métodos (i.e. funciones) de la clase data.frame
, tales como plot()
y summary()
, entre otros.
La lista de métodos de sf
puede obtenerse a través de la función methods()
:
# Métodos de la clase sf
methods(class = "sf")
## [1] $<- [ [[<-
## [4] aggregate anti_join arrange
## [7] as.data.frame cbind coerce
## [10] dbDataType dbWriteTable distinct
## [13] filter full_join group_by
## [16] group_split identify initialize
## [19] inner_join left_join merge
## [22] mutate plot print
## [25] rbind rename right_join
## [28] sample_frac sample_n select
## [31] semi_join show slice
## [34] slotsFromS3 st_agr st_agr<-
## [37] st_area st_as_sf st_bbox
## [40] st_boundary st_buffer st_cast
## [43] st_centroid st_collection_extract st_convex_hull
## [46] st_coordinates st_crop st_crs
## [49] st_crs<- st_difference st_filter
## [52] st_geometry st_geometry<- st_interpolate_aw
## [55] st_intersection st_intersects st_is
## [58] st_is_valid st_join st_line_merge
## [61] st_m_range st_make_valid st_nearest_points
## [64] st_node st_normalize st_point_on_surface
## [67] st_polygonize st_precision st_reverse
## [70] st_sample st_segmentize st_set_precision
## [73] st_shift_longitude st_simplify st_snap
## [76] st_sym_difference st_transform st_triangulate
## [79] st_union st_voronoi st_wrap_dateline
## [82] st_write st_z_range st_zm
## [85] summarise transform transmute
## [88] ungroup
## see '?methods' for accessing help and source code
Además de data.frame
, sf
es compatible con clases como tbl y las del paquete tibble, las cuales pueden manipularse mediante los métodos de dplyr. Esto que permite un manejo tidy (ordenado, organizado) de los datos geoespaciales, de acuerdo con el enfoque de Tidyverse.
Funciones para obtener información básica de un data frame:
# Clase del data frame cr_cantones
class(cr_cantones)
## [1] "sf" "data.frame"
# Dimensiones (cantidad de filas y de columnas)
dim(cr_cantones)
## [1] 82 12
# Cantidad de filas
nrow(cr_cantones)
## [1] 82
# Cantidad de columnas
ncol(cr_cantones)
## [1] 12
# Nombres de las columnas
names(cr_cantones)
## [1] "id" "gmlid" "objectid" "cod_catalo" "cod_canton"
## [6] "canton" "ori_toponi" "area" "cod_provin" "provincia"
## [11] "version" "geometry"
Remoción de la columna de geometría:
# Remoción de la columna de geometría
cr_cantones_df = st_drop_geometry(cr_cantones)
# Nombres de las columnas
names(cr_cantones_df)
## [1] "id" "gmlid" "objectid" "cod_catalo" "cod_canton"
## [6] "canton" "ori_toponi" "area" "cod_provin" "provincia"
## [11] "version"
# Clase de world_df (nótese como no se muestra ya la clase sf)
class(cr_cantones_df)
## [1] "data.frame"
# Tamaño del conjunto de datos original
print(object.size(cr_cantones), units="Kb")
## 136.9 Kb
# Tamaño del conjunto de datos sin geometrías
print(object.size(cr_cantones_df), units="Kb")
## 46 Kb
La función st_drop_geometry() puede ser útil cuando, por ejemplo, solo se necesita trabajar con los atributos y la columna con la geometría consume demasiada memoria del computador.
También es posible ocultar la columna de geometría de un conjunto de datos, al momento de desplegarlo, mediante la opción drop=TRUE
:
# Sin drop=TRUE
cr_cantones[1:10, c("canton", "area")]
## Simple feature collection with 10 features and 2 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -84.55536 ymin: 8.040251 xmax: -82.55287 ymax: 9.767523
## geographic CRS: WGS 84
## canton area geometry
## 1 Corredores 623.61 POLYGON ((-82.94161 8.42038...
## 2 Golfito 1753.42 MULTIPOLYGON (((-83.16666 8...
## 3 Coto Brus 944.24 POLYGON ((-82.90501 8.77424...
## 4 Osa 1932.03 POLYGON ((-83.83946 9.25534...
## 5 Buenos Aires 2382.94 POLYGON ((-83.32101 9.38409...
## 6 Pérez Zeledón 1901.08 POLYGON ((-83.77329 9.59824...
## 7 Quepos 557.85 POLYGON ((-84.13572 9.57168...
## 8 Talamanca 2792.23 POLYGON ((-82.89452 9.76752...
## 9 Parrita 483.22 POLYGON ((-84.30298 9.64968...
## 10 Tarrazú 291.27 POLYGON ((-83.98178 9.71801...
# Con drop=TRUE
cr_cantones[1:10, c("canton", "area"), drop=TRUE]
## canton area
## 1 Corredores 623.61
## 2 Golfito 1753.42
## 3 Coto Brus 944.24
## 4 Osa 1932.03
## 5 Buenos Aires 2382.94
## 6 Pérez Zeledón 1901.08
## 7 Quepos 557.85
## 8 Talamanca 2792.23
## 9 Parrita 483.22
## 10 Tarrazú 291.27
Frecuentemente, es necesario extrer subconjuntos del conjunto de datos original, para facilidad de manejo y para atender requerimientos específicos de un análisis. En esta sección, se explican las diferentes opciones para creación de subconjuntos, tanto con el paquete base
de R como con dplyr
. En resumen, estas son:
base
:
[]
y $
subset()
dplyr
:
select()
slice()
filter()
[]
y $
La notación de paréntesis cuadrados ([]
) y el signo de dólar ($
) permite crear subconjuntos con base en la posición de filas y de columnas, por medio de nombres de columnas y a través de la especificación de condiciones (i.e. expresiones booleanas).
# Subconjunto especificado por posiciones de filas
cr_cantones[1:10, ]
# Subconjunto especificado por posiciones de columnas
cr_cantones[, 8:10]
## Simple feature collection with 82 features and 3 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## First 10 features:
## area cod_provin provincia geometry
## 1 623.61 6 Puntarenas POLYGON ((-82.94161 8.42038...
## 2 1753.42 6 Puntarenas MULTIPOLYGON (((-83.16666 8...
## 3 944.24 6 Puntarenas POLYGON ((-82.90501 8.77424...
## 4 1932.03 6 Puntarenas POLYGON ((-83.83946 9.25534...
## 5 2382.94 6 Puntarenas POLYGON ((-83.32101 9.38409...
## 6 1901.08 1 San José POLYGON ((-83.77329 9.59824...
## 7 557.85 6 Puntarenas POLYGON ((-84.13572 9.57168...
## 8 2792.23 7 Limón POLYGON ((-82.89452 9.76752...
## 9 483.22 6 Puntarenas POLYGON ((-84.30298 9.64968...
## 10 291.27 1 San José POLYGON ((-83.98178 9.71801...
# Subconjunto especificado por nombres de columnas
cr_cantones[, c("canton", "area", "provincia")]
## Simple feature collection with 82 features and 3 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## First 10 features:
## canton area provincia geometry
## 1 Corredores 623.61 Puntarenas POLYGON ((-82.94161 8.42038...
## 2 Golfito 1753.42 Puntarenas MULTIPOLYGON (((-83.16666 8...
## 3 Coto Brus 944.24 Puntarenas POLYGON ((-82.90501 8.77424...
## 4 Osa 1932.03 Puntarenas POLYGON ((-83.83946 9.25534...
## 5 Buenos Aires 2382.94 Puntarenas POLYGON ((-83.32101 9.38409...
## 6 Pérez Zeledón 1901.08 San José POLYGON ((-83.77329 9.59824...
## 7 Quepos 557.85 Puntarenas POLYGON ((-84.13572 9.57168...
## 8 Talamanca 2792.23 Limón POLYGON ((-82.89452 9.76752...
## 9 Parrita 483.22 Puntarenas POLYGON ((-84.30298 9.64968...
## 10 Tarrazú 291.27 San José POLYGON ((-83.98178 9.71801...
Especificación mediante una condición:
# Cantones de la provincia de Cartago
cr_cantones[cr_cantones$provincia == "Cartago", c("canton", "provincia"), drop=TRUE]
## canton provincia
## 19 El Guarco Cartago
## 20 Cartago Cartago
## 22 Paraíso Cartago
## 23 Jiménez Cartago
## 24 Turrialba Cartago
## 26 Oreamuno Cartago
## 29 La Unión Cartago
## 34 Alvarado Cartago
La función subset() también retorna un subconjunto que cumple una condición:
# Cantones con área >= 2000 km2
subset(cr_cantones[, c("canton", "area"), drop=TRUE],
area >= 2000
)
## canton area
## 5 Buenos Aires 2382.94
## 8 Talamanca 2792.23
## 70 Pococí 2408.76
## 71 San Carlos 3352.31
## 74 Sarapiquí 2144.38
Los operadores lógicos y de comparación que pueden utilizarse en las condiciones de la función subset()
, y en expresiones booleanas en general, se listan en la siguiente tabla:
Operador | Descripción |
---|---|
== | igual a |
!= | distinto de |
>, < | mayor que, menor que |
>=, <= | mayor o igual que, menor o igual que |
&, |, ! | Operadores lógicos: y, o, no |
Las funciones del paquete base
de R son confiables y ampliamente usadas. Sin embargo, el enfoque más moderno de dplyr
permite flujos de trabajo más intuitivos y es más rápido, debido a que se apoya en código escrito en el lenguaje C++. Esto es útil, por ejemplo, cuando se trabaja con conjuntos de datos grandes (big data) y cuando se necesita integración con bases de datos. Las principales funciones de dplyr
para creación de subconjuntos son select()
, slice()
y filter()
.
La función select() permite seleccionar y renombrar columnas de un conjunto de datos.
# Selección de columnas
select(cr_cantones, canton, provincia)
## Simple feature collection with 82 features and 2 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## First 10 features:
## canton provincia geometry
## 1 Corredores Puntarenas POLYGON ((-82.94161 8.42038...
## 2 Golfito Puntarenas MULTIPOLYGON (((-83.16666 8...
## 3 Coto Brus Puntarenas POLYGON ((-82.90501 8.77424...
## 4 Osa Puntarenas POLYGON ((-83.83946 9.25534...
## 5 Buenos Aires Puntarenas POLYGON ((-83.32101 9.38409...
## 6 Pérez Zeledón San José POLYGON ((-83.77329 9.59824...
## 7 Quepos Puntarenas POLYGON ((-84.13572 9.57168...
## 8 Talamanca Limón POLYGON ((-82.89452 9.76752...
## 9 Parrita Puntarenas POLYGON ((-84.30298 9.64968...
## 10 Tarrazú San José POLYGON ((-83.98178 9.71801...
# Selección y renombramiento de la columna area
select(cr_cantones, canton, area_km2=area, provincia)
## Simple feature collection with 82 features and 3 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## First 10 features:
## canton area_km2 provincia geometry
## 1 Corredores 623.61 Puntarenas POLYGON ((-82.94161 8.42038...
## 2 Golfito 1753.42 Puntarenas MULTIPOLYGON (((-83.16666 8...
## 3 Coto Brus 944.24 Puntarenas POLYGON ((-82.90501 8.77424...
## 4 Osa 1932.03 Puntarenas POLYGON ((-83.83946 9.25534...
## 5 Buenos Aires 2382.94 Puntarenas POLYGON ((-83.32101 9.38409...
## 6 Pérez Zeledón 1901.08 San José POLYGON ((-83.77329 9.59824...
## 7 Quepos 557.85 Puntarenas POLYGON ((-84.13572 9.57168...
## 8 Talamanca 2792.23 Limón POLYGON ((-82.89452 9.76752...
## 9 Parrita 483.22 Puntarenas POLYGON ((-84.30298 9.64968...
## 10 Tarrazú 291.27 San José POLYGON ((-83.98178 9.71801...
slice() es el equivalente de select()
para filas.
# Subconjunto especificado mediante un rango de filas
slice(cr_cantones, 1:10)
La función filter() es el equivalente en dplyr
de la función subset()
del paquete base
. Retorna los registros que cumplen con una condición:
# Androides de "La Guerra de las Galaxias"
filter(starwars, species=="Droid")
## # A tibble: 5 x 13
## name height mass hair_color skin_color eye_color birth_year gender homeworld
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 C-3PO 167 75 <NA> gold yellow 112 <NA> Tatooine
## 2 R2-D2 96 32 <NA> white, bl~ red 33 <NA> Naboo
## 3 R5-D4 97 32 <NA> white, red red NA <NA> Tatooine
## 4 IG-88 200 140 none metal red 15 none <NA>
## 5 BB8 NA NA none none black NA none <NA>
## # ... with 4 more variables: species <chr>, films <list>, vehicles <list>,
## # starships <list>
Las funciones del paquete dplyr
suelen ser utilizadas conjuntamente con el operador pipe (%>%), el cual posibilita el “encadenamiento” de funciones: la salida de la función previa se convierte en el primer argumento de la siguiente función. En el siguiente ejemplo, el conjunto de datos starwars se pasa como entrada a la función filter()
, para filtrar los personajes humanos. Seguidamente, el resultado se pasa a la función select()
, para seleccionar las columnas name
, homeworld
y species
. Finalmente, la función slice()
reduce el resultado a las 10 primeras filas.
# Encadenamiento de funciones mediante pipe (%>%)
starwars %>%
filter(species == "Human") %>%
select(name, homeworld, species) %>%
slice(1:10)
## # A tibble: 10 x 3
## name homeworld species
## <chr> <chr> <chr>
## 1 Luke Skywalker Tatooine Human
## 2 Darth Vader Tatooine Human
## 3 Leia Organa Alderaan Human
## 4 Owen Lars Tatooine Human
## 5 Beru Whitesun lars Tatooine Human
## 6 Biggs Darklighter Tatooine Human
## 7 Obi-Wan Kenobi Stewjon Human
## 8 Anakin Skywalker Tatooine Human
## 9 Wilhuff Tarkin Eriadu Human
## 10 Han Solo Corellia Human
Una alternativa al uso de pipes es el anidamiento de las funciones:
# Anidamiento de funciones
slice(
select(
filter(
starwars,
species=="Human"
),
name, homeworld, species
),
1:10
)
## # A tibble: 10 x 3
## name homeworld species
## <chr> <chr> <chr>
## 1 Luke Skywalker Tatooine Human
## 2 Darth Vader Tatooine Human
## 3 Leia Organa Alderaan Human
## 4 Owen Lars Tatooine Human
## 5 Beru Whitesun lars Tatooine Human
## 6 Biggs Darklighter Tatooine Human
## 7 Obi-Wan Kenobi Stewjon Human
## 8 Anakin Skywalker Tatooine Human
## 9 Wilhuff Tarkin Eriadu Human
## 10 Han Solo Corellia Human
Las operaciones de agregación realizan cálculos (suma, promedio, etc.) a partir de la agrupación de valores de variables. En esta sección, se explican funciones de agregación contenidas en los paquetes stats
, sf
y dplyr
, las cuales son:
stats
:
aggregate()
sf
:
aggregate()
dplyr
:
summarize()
Para los ejemplos, se utilizarán nuevamente datos publicados en la Infraestructura Nacional de Datos Espaciales de Costa Rica (SNIT):
# Recuperación de los conjuntos de datos de provincias y cantones de Costa Rica desde un servicio WFS
# URL base
url_base_wfs <- "http://geos.snitcr.go.cr/be/IGN_5/wfs?"
# URL de las solicitudes de las capas
solicitud_provincias_wfs <- "request=GetFeature&service=WFS&version=2.0.0&typeName=IGN_5:limiteprovincial_5k&outputFormat=application/json"
solicitud_cantones_wfs <- "request=GetFeature&service=WFS&version=2.0.0&typeName=IGN_5:limitecantonal_5k&outputFormat=application/json"
# Recuperación, simplificación y cambio de CRS de las capas
st_read(paste0(url_base_wfs, solicitud_provincias_wfs)) %>%
st_simplify(dTolerance = 1000) %>%
st_transform(4326) -> cr_provincias
st_read(paste0(url_base_wfs, solicitud_cantones_wfs)) %>%
st_simplify(dTolerance = 1000) %>%
st_transform(4326) -> cr_cantones
# Mapeo de la capa de provincias
plot(cr_provincias$geometry, axes=TRUE, graticule=TRUE)
# Mapeo de la capa de cantones
plot(cr_cantones$geometry, axes=TRUE, graticule=TRUE)
La función aggregate() del paquete stats aplica una función de agregación (ej. suma, promedio, mínimo, máximo) sobre una columna. El resultado es un objeto de tipo data.frame
.
# Suma de áreas de cantones por provincia
aggregate(
data = cr_cantones,
area ~ provincia,
FUN = sum,
na.rm = TRUE
)
## provincia area
## 1 Alajuela 9772.25
## 2 Cartago 3093.23
## 3 Guanacaste 10189.85
## 4 Heredia 2663.46
## 5 Limón 9176.97
## 6 Puntarenas 11298.51
## 7 San José 4969.73
aggregate()
es una función genérica, lo que significa que pueden comportarse de manera diferente, dependiendo de los valores de entrada. El paquete sf
también provee una versión de aggregate(), la cual se activa cuando recibe un objeto sf
y se usa el argumento by
. El resultado es un objeto de tipo sf
.
# Suma de áreas de cantones por provincia
aggregate(
cr_cantones["area"],
by = list(cr_cantones$provincia),
FUN = sum,
na.rm = TRUE
)
## Simple feature collection with 7 features and 2 fields
## Attribute-geometry relationship: 0 constant, 1 aggregate, 1 identity
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## Group.1 area geometry
## 1 Alajuela 9772.25 POLYGON ((-84.46768 9.94154...
## 2 Cartago 3093.23 POLYGON ((-83.81564 10.0834...
## 3 Guanacaste 10189.85 POLYGON ((-85.19084 10.0639...
## 4 Heredia 2663.46 MULTIPOLYGON (((-84.17558 1...
## 5 Limón 9176.97 POLYGON ((-82.89299 9.76667...
## 6 Puntarenas 11298.51 MULTIPOLYGON (((-87.04808 5...
## 7 San José 4969.73 POLYGON ((-83.76921 9.59051...
La función summarize() es el equivalente de aggregate()
en el paquete dplyr
. Suele utilizarse conjuntamente con group_by(), que especifica la variable a agrupar.
# Suma de áreas de cantones por provincia
cr_cantones %>%
group_by(provincia) %>%
summarize(area_km2 = sum(area, na.rm = TRUE))
## Simple feature collection with 7 features and 2 fields
## geometry type: GEOMETRY
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## # A tibble: 7 x 3
## provincia area_km2 geometry
## <fct> <dbl> <GEOMETRY [°]>
## 1 Alajuela 9772. POLYGON ((-84.46768 9.941544, -84.46238 9.924008, -84.542~
## 2 Cartago 3093. POLYGON ((-83.81564 10.08343, -83.66829 10.02485, -83.605~
## 3 Guanacaste 10190. POLYGON ((-85.19084 10.06393, -85.18589 10.0664, -85.1498~
## 4 Heredia 2663. MULTIPOLYGON (((-84.17558 10.00458, -84.15569 9.968855, -~
## 5 Limón 9177. POLYGON ((-82.89299 9.766678, -82.83611 9.73543, -82.8093~
## 6 Puntarenas 11299. MULTIPOLYGON (((-87.04808 5.556849, -87.0301 5.527324, -8~
## 7 San José 4970. POLYGON ((-83.76921 9.590515, -83.75314 9.560028, -83.718~
Nótese que este enfoque permite renombrar las variables, como también se hace en el siguiente ejemplo:
# Suma total de las áreas de cantones
cr_cantones %>%
summarize(area_km2 = sum(area, na.rm = TRUE), cantidad_cantones = n())
## Simple feature collection with 1 feature and 2 fields
## geometry type: MULTIPOLYGON
## dimension: XY
## bbox: xmin: -87.09101 ymin: 5.500758 xmax: -82.55287 ymax: 11.21964
## geographic CRS: WGS 84
## area_km2 cantidad_cantones geometry
## 1 51164 82 MULTIPOLYGON (((-87.04808 5...
El siguiente ejemplo utiliza otras funciones del paquete dplyr
para encontrar las tres provincias más grandes y su respectiva área:
# Área y cantidad de cantones de las tres provincias más grandes
cr_cantones %>%
select(area, provincia) %>%
group_by(provincia) %>%
summarize(area = sum(area, na.rm = TRUE), cantidad_cantones = n()) %>%
arrange(desc(area)) %>%
top_n(n = 3, wt = area) %>%
st_drop_geometry()
## # A tibble: 3 x 3
## provincia area cantidad_cantones
## * <fct> <dbl> <int>
## 1 Puntarenas 11299. 11
## 2 Guanacaste 10190. 11
## 3 Alajuela 9772. 16
La combinación de datos ubicados en diferentes fuentes es una tarea común en análisis. Este tipo de operaciones se realizan con base en atributos que son comunes en los conjuntos de datos que se desea cruzar. El paquete dplyr
proporciona varias funciones para realizar cruces de datos, entre las que se encuentran:
left_join()
inner_join()
La función left_join()
mantiene todos los registros de la tabla del lado izquierdo y agrega las columnas de la tabla del lado derecho, en los registros en los que hay coincidencia.
# "Join" de los datos de producción de café. Ambas tablas comparten la columna name_long.
world_coffee_1 <- left_join(world, coffee_data)
## Joining, by = "name_long"
# Mapeo de la producción de café en 2017
plot(world_coffee_1["coffee_production_2017"], main="Producción mundial de café en 2017")
La función inner_join()
retorna solamente aquellos registros que coinciden en ambas tablas.
# "Join" de los datos de producción de café. Ambas tablas comparten la columna name_long.
world_coffee_2 <- inner_join(world, coffee_data)
## Joining, by = "name_long"
# Mapeo de la producción de café en 2017
plot(world_coffee_2["coffee_production_2017"], main="Producción mundial de café en 2017")
dplyr
para desplegar el nombre, el área y la provincia de los cantones cuya área sea menor a 50 km2 y que se ubiquen en las provincias de Heredia o de Cartago.