Aritméticas como:
+-*/^%%De comparación:
<><=>===!=Lógicos:
& (devuelve TRUE si ambos valores
son verdaderos)| (devuelve FALSE cuando los dos
valores son falsos)! (cambia el valor de verdadero a falso y
viceversa)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
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
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 |
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
| Comando | Descripción | Ejemplo |
|---|---|---|
install.packages() |
Instalar paquete (es necesario hacer sólo una vez) | install.packages("dplyr") |
library() |
Cargar paquete | library(dplyr) |
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) |
Existen los siguientes tipos de uniones por un campo común entre los 2 subconjuntos:
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...
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")
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))
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
http://www.catastro.minhap.es/INSPIRE/Addresses/28/28900-MADRID/A.ES.SDGC.AD.28900.zip