Algunas operaciones básicas con R

Aritméticas como:

De comparación:

Lógicos:

Clases de datos

ciudad <- 'Madrid'
poblacion <- 551751
class(ciudad)
## [1] "character"
class(poblacion)
## [1] "numeric"

Para almacenar el valor de una variable se usa el operador <-

a <- 10
b <- 20
c <- a + b
print(c)
## [1] 30

Clases de Objetos

10
## [1] 10
c(1,2,3,4)
## [1] 1 2 3 4
matrix(c(1,2,3,4),nrow = 2, ncol=2)
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
# Definir vectores de varios tipos
edad <- c(24, 22, 18) # numerico
sexo <- c("Hombre", "Mujer", "Hombre")
sexo_factor <- factor(sexo) # factor
notaMedia <- c(8, 7.75,4) # numerico
opinionUniv <- c("Faltan recursos", "Aulas llenas", "Buen profesorado")# texto

# Cear data frame a partir de los vectores anteriores
tabla <- data.frame(edad, sexo_factor,notaMedia,opinionUniv)

# Ver data frame
tabla
##   edad sexo_factor notaMedia      opinionUniv
## 1   24      Hombre      8.00  Faltan recursos
## 2   22       Mujer      7.75     Aulas llenas
## 3   18      Hombre      4.00 Buen profesorado

Data Frame

Un problema con los vectores y matrices es que solo admiten datos del mismo tipo. Ese es un incoveniente cuando se intenta modelar o medir una parte de la realidad que tiene diferentes tipos de datos. Una encuesta, por ejemplo, puede tener datos numéricos (edad), texto (opiniones), factor(idioma,sexo), fechas, etc.

Para ello, R cuenta los “data frame” o tablas de datos, que pueden recibir diferentes tipos de datos en sus columnas.Un data frame es un conjunto de datos de forma rectangular y que tiene variables en las columnas y casos en las filas.

Comando Descripción Ejemplo
$ Seleccionar una variable de un data frame dataframe$edad

Funciones

Una función es una subrutina que recibe unos datos de entrada denominados y parametrosy devuelve un resultado como salida. Se sigue la siguiente sintaxis:

# Crear una función que devuelve la hipotenusa de un triángulo rectangulo
hipotenusa <- function(a,b){
  c <- sqrt(a^2+b^2)
  return(c)
}
hipotenusa(3,4)
## [1] 5

Paquetes R

Comando Descripción Ejemplo
install.packages() Instalar paquete (es necesario hacer sólo una vez) install.packages("dplyr")
library() Cargar paquete library(dplyr)

Manipulación de datos (dplyr)

Nota: Como varios de estos comandos se usan usualmente con el operador “pipe” (%>%), en los ejemplos usamos df como nombre del data frame sobre el cual se aplica la función.

Comando Descripción Ejemplo
filter() Seleccionar (filtrar) observaciones (filas) de un data frame df %>% filter(edad >= 18 & comuna == "Concon")
select() Seleccionar variables (columnas) de un data frame df %>% select(edad, comuna, carrera)
Al usar select() con - se seleccionan todas las variables, excepto las indicadas df %>% select(-comuna)
rename() Renombrar variables de un data frame df %>% rename(edad = edad.del.individuo)
mutate() Modificar variables y entregar el resultado en otra variable df %>% mutate(ptos.totales = ptos.local + ptos.visita)
summarise() Generar alguna estadística a partir de las variables del data frame (reducir varios valores a uno solo) df %>% summarise(edad.promedio = mean(edad))
group_by() Agrupar las observaciones según una o más variables para luego calcular alguna estadística por grupo df %>% group_by(carrera) %>% summarise(edad.promedio = mean(edad))
arrange() Reordenar observaciones según una o más variables (usar - para orden descendiente) df %>% arrange(edad, -ingresos)

Uniones Alfanuméricas

Existen los siguientes tipos de uniones por un campo común entre los 2 subconjuntos:

  • left_join
  • right_join
  • inner_join
  • full_join
  • semi_join
  • anti_join

Libreria Sf

Los objetos principales, del tipo sf, son extensiones de data.frame y como mínimo contienen una columna denominada geometry que contiene la geometría de cada observación (se trata de una columna tipo list). El paquete ´dplyr´ conserva la componente espacial. Es decir al seleccionar, filtrar y agrupar, dichas operaciones las realiza también sobre la geometría.

library(sf)
## Linking to GEOS 3.11.2, GDAL 3.6.2, PROJ 9.2.0; sf_use_s2() is TRUE
nc <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
nc <- nc[c(5, 9:15)]
head(nc,n=10)
## Simple feature collection with 10 features and 7 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -81.74107 ymin: 36.07282 xmax: -75.77316 ymax: 36.58965
## Geodetic CRS:  NAD27
##           NAME BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79
## 1         Ashe  1091     1      10  1364     0      19
## 2    Alleghany   487     0      10   542     3      12
## 3        Surry  3188     5     208  3616     6     260
## 4    Currituck   508     1     123   830     2     145
## 5  Northampton  1421     9    1066  1606     3    1197
## 6     Hertford  1452     7     954  1838     5    1237
## 7       Camden   286     0     115   350     2     139
## 8        Gates   420     0     254   594     2     371
## 9       Warren   968     4     748  1190     2     844
## 10      Stokes  1612     1     160  2038     5     176
##                          geometry
## 1  MULTIPOLYGON (((-81.47276 3...
## 2  MULTIPOLYGON (((-81.23989 3...
## 3  MULTIPOLYGON (((-80.45634 3...
## 4  MULTIPOLYGON (((-76.00897 3...
## 5  MULTIPOLYGON (((-77.21767 3...
## 6  MULTIPOLYGON (((-76.74506 3...
## 7  MULTIPOLYGON (((-76.00897 3...
## 8  MULTIPOLYGON (((-76.56251 3...
## 9  MULTIPOLYGON (((-78.30876 3...
## 10 MULTIPOLYGON (((-80.02567 3...

Representación de datos espaciales

El paquete sf implementa métodos plot() para la representación de objetos espaciales. Estos métodos suelen ser la forma más rápida de generar gráficos básicos, pero también se pueden emplear otros paquetes como ggplot2.

plot(nc$geometry)

library(ggplot2)

ggplot() +
geom_sf(data = nc$geometry, color = "black", fill = "grey")

Uniones Espaciales

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(sf)
nc2 <- nc %>% 
  summarise()

data <- st_bbox(nc2)
data <- st_bbox(nc2)

puntos <- data.frame(x = runif(1000,data$xmin,data$xmax),
                   y = runif(1000,data$ymin,data$ymax))
puntos <- st_as_sf(puntos, coords=c("x","y"),crs=4267)

unionEspacial <- function(puntos,poligonos) {
  Resultado <- as.data.frame(st_intersects(puntos,poligonos))
  puntos <- puntos %>%
    mutate(row.id=1:nrow(puntos))
  poligonos <- poligonos %>%
    mutate(col.id=1:nrow(poligonos))
  Resultado <- inner_join(Resultado,puntos,by="row.id")
  Resultado <- inner_join(Resultado,poligonos,by="col.id")
  Resultado <- Resultado %>%
    select(-row.id,-col.id,-geometry.y,NAME)
  return(Resultado)
}

Resultado <- unionEspacial(puntos,nc)
head(Resultado)
##                   geometry.x      NAME BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79
## 1 POINT (-82.15628 36.04787)  Mitchell   671     0       1   919     2       4
## 2 POINT (-78.93166 36.24643)    Person  1556     4     613  1790     4     650
## 3 POINT (-77.85503 35.03394)    Duplin  2483     4    1061  2777     7    1227
## 4  POINT (-76.9393 34.73301)  Carteret  2414     5     341  3339     4     487
## 5  POINT (-78.6203 34.01141) Brunswick  2181     5     659  2655     6     841
## 6 POINT (-77.11208 36.34551)  Hertford  1452     7     954  1838     5    1237
nc2 <- nc %>%
  filter(NAME=="Bladen")
Resultado2 <- Resultado %>%
  filter(NAME=="Bladen")

library(ggplot2)
ggplot() +
geom_sf(data = nc$geometry, color = "black", fill = "grey") +
  geom_sf(data=nc2$geometry,color="red",fill="grey") +
  geom_sf(data=Resultado$geometry.x) 

Condado <- Resultado2$NAME
ggplot() +
geom_sf(data = nc2$geometry, color = "black", fill = "grey") +
  geom_sf(data=Resultado2$geometry.x,aes(color = Condado))

Capa de Seccionado Censal

La cartografía digitalizada de las secciones censales se puede descargar desde la web del INE desde la siguiente ruta https://www.ine.es/ss/Satellite?L=es_ES&c=Page&cid=1259952026632&p=1259952026632&pagename=ProductosYServicios%2FPYSLayout

Ejercicio práctico

  • Descarga de la capa espacial de Seccionado Censal del INE.
  • Explorar los datos y hallar la variable asociada al municipio.
  • Agrupar por dicho campo para generar la capa de municipios.
  • Descarga de INE base de datos de población
  • Unión alfanumérica por identificador de municipio.
  • Representación en un mapa del resultado de una provincia (densidad de habitantes).
  • Descarga de las direcciones ATOM Catastrales de Madrid.
  • Filtro para quedarse con la geometría de secciones censales de dicho municipio.
  • Unión espacial para asignar a cada dirección su sección censal.
  • Plasmar el resultado en un mapa (conteo de direcciones por distrito).