5  Sélection et jointure attributaire

5.1 Sélection par attributs

Les objets sf sont des data.frame, on peut donc sélectionner leur lignes et leur colonnes de la même manière que les data.frame.

# sélection de lignes
com[1:2, ]
#> Simple feature collection with 2 features and 12 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 557759.2 ymin: 6371852 xmax: 607179 ymax: 6410204
#> Projected CRS: RGF93 v1 / Lambert-93
#>   INSEE_COM NOM_COM         STATUT POPULATION    AGR_H    AGR_F    IND_H IND_F
#> 1     46001   Albas Commune simple        522 4.978581 0.000000 4.936153     0
#> 2     46002  Albiac Commune simple         67 0.000000 9.589041 0.000000     0
#>      BTP_H BTP_F     TER_H     TER_F                           geom
#> 1 9.957527     0 44.917145 34.681799 MULTIPOLYGON (((559262 6371...
#> 2 4.794521     0  4.794521  9.589041 MULTIPOLYGON (((605540.7 64...
com[com$NOM_COM == "Gramat", ]
#> Simple feature collection with 1 feature and 12 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 593605.6 ymin: 6402330 xmax: 602624.6 ymax: 6413784
#> Projected CRS: RGF93 v1 / Lambert-93
#>     INSEE_COM NOM_COM         STATUT POPULATION    AGR_H    AGR_F    IND_H
#> 119     46128  Gramat Commune simple       3468 10.19868 15.29802 122.3842
#>        IND_F    BTP_H BTP_F    TER_H    TER_F                           geom
#> 119 107.0862 56.09275     0 260.0664 304.1941 MULTIPOLYGON (((594713.1 64...
# sélection de colonnes
com[, "POPULATION"]
#> Simple feature collection with 313 features and 1 field
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 539668.5 ymin: 6346290 xmax: 637380.9 ymax: 6439668
#> Projected CRS: RGF93 v1 / Lambert-93
#> First 10 features:
#>    POPULATION                           geom
#> 1         522 MULTIPOLYGON (((559262 6371...
#> 2          67 MULTIPOLYGON (((605540.7 64...
#> 3         706 MULTIPOLYGON (((593707.7 64...
#> 4         219 MULTIPOLYGON (((613211.3 64...
#> 5         329 MULTIPOLYGON (((556744.9 63...
#> 6         377 MULTIPOLYGON (((576667.2 64...
#> 7         988 MULTIPOLYGON (((581404 6370...
#> 8         203 MULTIPOLYGON (((558216 6389...
#> 9         642 MULTIPOLYGON (((612729.6 63...
#> 10        367 MULTIPOLYGON (((581404 6370...
com[com$NOM_COM == "Gramat", 1:4]
#> Simple feature collection with 1 feature and 4 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 593605.6 ymin: 6402330 xmax: 602624.6 ymax: 6413784
#> Projected CRS: RGF93 v1 / Lambert-93
#>     INSEE_COM NOM_COM         STATUT POPULATION                           geom
#> 119     46128  Gramat Commune simple       3468 MULTIPOLYGON (((594713.1 64...

5.2 Jointure attributaire

Nous pouvons joindre un data.frame à un objet sf en utilisant la fonction merge() et en s’appuyant sur des identifiants communs aux deux objets.
Attention à l’ordre des arguments, l’objet retourné sera du même type que x. Il n’est pas possible de faire une jointure attributaire en utilisant deux objets sf.

# import de données supplémentaires 
com_df <- read.csv(file = "data/com.csv")

# des identifiants en commun?
names(com_df)
#> [1] "INSEE_COM" "ACT"       "IND"       "SACT"      "SACT_IND"
names(com)
#>  [1] "INSEE_COM"  "NOM_COM"    "STATUT"     "POPULATION" "AGR_H"     
#>  [6] "AGR_F"      "IND_H"      "IND_F"      "BTP_H"      "BTP_F"     
#> [11] "TER_H"      "TER_F"      "geom"
# jointure attributaire 
com_final <- merge(
  x = com,             # l'objet sf
  y = com_df,          # le data.frame
  by.x = "INSEE_COM",  # identifiant dans x
  by.y = "INSEE_COM",  # identifiant dans y
  all.x = TRUE         # conserver toutes les lignes
)

# Les deux objets ont bien été joints
head(com_final, 3)
#> Simple feature collection with 3 features and 16 fields
#> Geometry type: MULTIPOLYGON
#> Dimension:     XY
#> Bounding box:  xmin: 557759.2 ymin: 6371852 xmax: 607179 ymax: 6418606
#> Projected CRS: RGF93 v1 / Lambert-93
#>   INSEE_COM  NOM_COM         STATUT POPULATION     AGR_H    AGR_F     IND_H
#> 1     46001    Albas Commune simple        522  4.978581 0.000000  4.936153
#> 2     46002   Albiac Commune simple         67  0.000000 9.589041  0.000000
#> 3     46003 Alvignac Commune simple        706 10.419682 0.000000 10.419682
#>      IND_F     BTP_H BTP_F     TER_H     TER_F       ACT       IND     SACT
#> 1 0.000000  9.957527     0 44.917145 34.681799  99.47120  4.936153 19.05579
#> 2 0.000000  4.794521     0  4.794521  9.589041  28.76712  0.000000 42.93600
#> 3 5.209841 10.419682     0 57.308249 78.147612 171.92475 15.629522 24.35195
#>   SACT_IND                       geometry
#> 1 4.962393 MULTIPOLYGON (((559262 6371...
#> 2 0.000000 MULTIPOLYGON (((605540.7 64...
#> 3 9.090909 MULTIPOLYGON (((593707.7 64...

Exercice

  1. Importer la couche des communes du département du Lot à partir du fichier geopackage lot.gpkg.

  2. Importer le fichier com.csv.
    Ce jeu de données porte sur les communes du Lot et contient plusieurs variables supplémentaires:

    • le nombre d’actifs (ACT).
    • le nombre d’actifs dans l’industrie (IND)
    • la part des actifs dans la population totale (SACT)
    • la part des actifs dans l’industrie dans le total des actifs (SACT_IND)
  3. Joindre le jeu de données et la couche des communes.

  4. Sélectionnez les communes du Lot ayant plus de 500 actifs et dont la part des actifs dans la population totale est supérieure à 30%.

  5. Affichez toutes les communes en gris et les communes sélectionnées en rouge.