2  Manipulation de la base

On peut maintenant regarder à quoi ressemble la table principale, celle des données.

RP %>% head() %>% gt()
CANTVILLE NUMMI ACHLR AEMMR AGED AGER20 AGEREV AGEREVQ ANAI ANEMR APAF ARM ASCEN BAIN BATI CATIRIS CATL CATPC CHAU CHFL CHOS CLIM CMBL COUPLE CS1 CUIS DEPT DEROU DIPL DNAI EAU EGOUL ELEC EMPL ETUD GARL HLML ILETUD ILT IMMI INAI INATC INFAM INPER INPERF IPONDI IRAN IRIS LIENF LPRF LPRM METRODOM MOCO MODV NA17 NA5 NAIDT NBPI NE17FR NE24FR NE3FR NE5FR NENFR NPERR NUMF ORIDT RECH REGION SANI SANIDOM SEXE SFM STAT_CONJ STATR STOCD SURF TACT TACTD16 TP TRANS TRIRIS TYPC TYPFC TYPL TYPMC TYPMR VOIT WC
75ZZ 1 1 9 72 79 72 70 1944 02 0 75115 1 Z Z H 1 0 Z 2 Z Z 2 2 7 Z 75 Z 19 2B Z Z Z ZZ 2 1 2 Z Z 2 3 1 0 1 Z 3.360730 1 751155817 0 0 1 M 32 50 ZZ ZZ 0 04 Z Z Z Z Z 1 Z 0 0 11 2 ZZ 2 12 6 Z 10 4 21 210 Z Z 751501 3 Z 1 1 12 1 Z
75ZZ 2 2 9 59 64 58 55 1958 03 1 75112 2 Z Z H 1 0 Z 3 Z Z 4 1 3 Z 75 Z 17 99 Z Z Z 21 2 2 2 Z 1 1 6 1 1 2 2 3.668459 1 751124512 1 1 1 M 21 40 FZ FZ 30 01 0 0 0 0 0 2 1 0 Z 11 1 ZZ 1 30 3 2 21 1 11 116 1 5 750901 3 2 6 4 41 0 Z
75ZZ 2 2 9 30 29 29 25 1987 03 1 75112 2 Z Z H 1 0 Z 3 Z Z 4 1 3 Z 75 Z 16 99 Z Z Z 21 2 2 2 Z 3 1 6 2 1 2 2 3.668459 1 751124512 1 2 2 M 21 31 MN GU 30 01 0 0 0 0 0 2 1 0 Z 11 1 ZZ 1 30 3 2 21 1 11 111 1 6 750901 3 2 6 4 41 0 Z
75ZZ 3 1 7 82 80 81 80 1938 05 2 75115 1 Z Z H 1 0 Z 2 Z Z 2 1 7 Z 75 Z 14 92 Z Z Z ZZ 2 1 2 Z Z 2 2 1 1 2 2 3.478821 1 751155907 2 2 2 M 21 40 ZZ ZZ 0 03 0 0 0 0 0 2 1 0 9 11 2 ZZ 2 30 1 Z 10 4 21 210 Z Z 751431 3 2 2 4 44 1 Z
75ZZ 3 1 7 86 80 85 85 1934 05 1 75115 1 Z Z H 1 0 Z 2 Z Z 2 1 7 Z 75 Z 14 75 Z Z Z ZZ 2 1 2 Z Z 2 1 1 1 2 2 3.478821 1 751155907 1 1 1 M 21 40 ZZ ZZ 0 03 0 0 0 0 0 2 1 0 9 11 2 ZZ 1 30 1 Z 10 4 21 210 Z Z 751431 3 2 2 4 44 1 Z
75ZZ 4 2 9 1 2 0 0 2019 01 3 75116 1 Z Z H 1 0 Z 2 Z Z 2 2 8 Z 75 Z ZZ 92 Z Z Z ZZ 2 1 2 Z Z 2 2 1 1 3 3 2.776887 Z 751166301 3 3 3 M 12 12 ZZ ZZ 0 04 2 2 2 2 2 3 1 0 Z 11 2 ZZ 1 22 6 Z 30 6 23 230 Z Z 751741 3 1 2 3 32 1 Z

La fonction str() ou son équivalent en langage dplyr la fonction glimpse nous donne la liste des variables avec cette fois leur format et leurs modalités (les premières seulement s’il y en a beaucoup).

# str(RP)
RP %>% glimpse()
Rows: 4,354,518
Columns: 88
$ CANTVILLE <fct> 75ZZ, 75ZZ, 75ZZ, 75ZZ, 75ZZ, 75ZZ, 75ZZ, 75ZZ, 75ZZ, 75ZZ, …
$ NUMMI     <fct> 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 7, 7, 7, 7, 8, 9, 10, 10, 1…
$ ACHLR     <fct> 1, 2, 2, 1, 1, 2, 2, 2, 1, 1, 4, 3, 3, 3, 3, 4, 3, 4, 4, 4, …
$ AEMMR     <fct> 9, 9, 9, 7, 7, 9, 9, 9, 6, 6, 9, 9, 9, 9, 9, 7, 6, 9, 9, 9, …
$ AGED      <int> 72, 59, 30, 82, 86, 1, 34, 3, 67, 67, 34, 51, 48, 17, 13, 82…
$ AGER20    <int> 79, 64, 29, 80, 80, 2, 39, 2, 79, 79, 39, 54, 54, 17, 14, 80…
$ AGEREV    <int> 72, 58, 29, 81, 85, 0, 33, 2, 67, 66, 33, 50, 47, 16, 12, 81…
$ AGEREVQ   <int> 70, 55, 25, 80, 85, 0, 30, 0, 65, 65, 30, 50, 45, 15, 10, 80…
$ ANAI      <int> 1944, 1958, 1987, 1938, 1934, 2019, 1986, 2017, 1950, 1950, …
$ ANEMR     <fct> 02, 03, 03, 05, 05, 01, 01, 01, 06, 06, 01, 03, 03, 03, 03, …
$ APAF      <fct> 0, 1, 1, 2, 1, 3, 2, 3, 1, 2, 0, 1, 2, 3, 3, 0, 0, 3, 2, 3, …
$ ARM       <fct> 75115, 75112, 75112, 75115, 75115, 75116, 75116, 75116, 7511…
$ ASCEN     <fct> 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, …
$ BAIN      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ BATI      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ CATIRIS   <fct> H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, …
$ CATL      <fct> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ CATPC     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ CHAU      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ CHFL      <fct> 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, …
$ CHOS      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ CLIM      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ CMBL      <fct> 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, …
$ COUPLE    <int> 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, …
$ CS1       <int> 7, 3, 3, 7, 7, 8, 8, 8, 7, 7, 3, 5, 5, 8, 8, 7, 7, 5, 4, 4, …
$ CUIS      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ DEPT      <int> 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, …
$ DEROU     <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ DIPL      <fct> 19, 17, 16, 14, 14, ZZ, 18, ZZ, 17, 16, 18, 03, 13, 03, ZZ, …
$ DNAI      <fct> 2B, 99, 99, 92, 75, 92, 92, 92, 92, 92, 49, 99, 99, 93, 75, …
$ EAU       <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ EGOUL     <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ ELEC      <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …
$ EMPL      <fct> ZZ, 21, 21, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, 16, 16, 16, ZZ, ZZ, …
$ ETUD      <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, …
$ GARL      <fct> 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, …
$ HLML      <fct> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, …
$ ILETUD    <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, 1, 1, Z, Z, Z, Z, Z, …
$ ILT       <fct> Z, 1, 3, Z, Z, Z, Z, Z, Z, Z, 3, 1, 1, Z, Z, Z, Z, 1, 1, Z, …
$ IMMI      <int> 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, …
$ INAI      <int> 3, 6, 6, 2, 1, 2, 2, 2, 2, 2, 3, 6, 6, 2, 1, 1, 2, 3, 3, 3, …
$ INATC     <int> 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ INFAM     <fct> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, …
$ INPER     <fct> 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 1, 4, 4, 4, 4, 1, 1, 3, 3, 3, …
$ INPERF    <fct> Z, 2, 2, 2, 2, 3, 3, 3, 2, 2, Z, 4, 4, 4, 4, Z, Z, 3, 3, 3, …
$ IPONDI    <dbl> 3.360730, 3.668459, 3.668459, 3.478821, 3.478821, 2.776887, …
$ IRAN      <fct> 1, 1, 1, 1, 1, Z, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
$ IRIS      <fct> 751155817, 751124512, 751124512, 751155907, 751155907, 75116…
$ LIENF     <fct> 0, 1, 1, 2, 1, 3, 2, 3, 1, 2, 0, 1, 2, 3, 3, 0, 0, 3, 2, 3, …
$ LPRF      <fct> 0, 1, 2, 2, 1, 3, 1, 3, 1, 2, 0, 1, 2, 3, 3, 0, 0, 3, 1, 3, …
$ LPRM      <fct> 1, 1, 2, 2, 1, 3, 1, 3, 1, 2, 1, 1, 2, 3, 3, 1, 1, 3, 1, 3, …
$ METRODOM  <fct> M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, M, …
$ MOCO      <int> 32, 21, 21, 21, 21, 12, 23, 12, 21, 21, 32, 22, 22, 11, 11, …
$ MODV      <int> 50, 40, 31, 40, 40, 12, 33, 12, 40, 40, 20, 32, 32, 11, 11, …
$ NA17      <fct> ZZ, FZ, MN, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, OQ, MN, MN, ZZ, ZZ, …
$ NA5       <fct> ZZ, FZ, GU, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, OQ, GU, GU, ZZ, ZZ, …
$ NAIDT     <int> 0, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 30, 30, 0, 0, 0, 0, 0, 0,…
$ NBPI      <fct> 04, 01, 01, 03, 03, 04, 04, 04, 08, 08, 01, 03, 03, 03, 03, …
$ NE17FR    <fct> Z, 0, 0, 0, 0, 2, 2, 2, 0, 0, Z, 2, 2, 2, 2, Z, Z, 0, 0, 0, …
$ NE24FR    <fct> Z, 0, 0, 0, 0, 2, 2, 2, 0, 0, Z, 2, 2, 2, 2, Z, Z, 1, 1, 1, …
$ NE3FR     <fct> Z, 0, 0, 0, 0, 2, 2, 2, 0, 0, Z, 0, 0, 0, 0, Z, Z, 0, 0, 0, …
$ NE5FR     <fct> Z, 0, 0, 0, 0, 2, 2, 2, 0, 0, Z, 0, 0, 0, 0, Z, Z, 0, 0, 0, …
$ NENFR     <fct> Z, 0, 0, 0, 0, 2, 2, 2, 0, 0, Z, 2, 2, 2, 2, Z, Z, 2, 2, 2, …
$ NPERR     <fct> 1, 2, 2, 2, 2, 3, 3, 3, 2, 2, 1, 4, 4, 4, 4, 1, 1, 3, 3, 3, …
$ NUMF      <fct> Z, 1, 1, 1, 1, 1, 1, 1, 1, 1, Z, 1, 1, 1, 1, Z, Z, 1, 1, 1, …
$ ORIDT     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ RECH      <fct> 0, Z, Z, 9, 9, Z, 0, Z, 0, 0, Z, Z, Z, 0, Z, 9, 0, Z, Z, 1, …
$ REGION    <int> 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, …
$ SANI      <fct> 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
$ SANIDOM   <fct> ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, ZZ, …
$ SEXE      <int> 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, …
$ SFM       <fct> 12, 30, 30, 30, 30, 22, 22, 22, 30, 30, 12, 32, 32, 32, 32, …
$ STAT_CONJ <int> 6, 3, 3, 1, 1, 6, 1, 6, 1, 1, 6, 3, 3, 6, 6, 4, 5, 6, 6, 6, …
$ STATR     <fct> Z, 2, 2, Z, Z, Z, Z, Z, Z, Z, 1, 1, 1, Z, Z, Z, Z, 1, 1, Z, …
$ STOCD     <fct> 10, 21, 21, 10, 10, 30, 30, 30, 10, 10, 21, 30, 30, 30, 30, …
$ SURF      <fct> 4, 1, 1, 4, 4, 6, 6, 6, 7, 7, 1, 4, 4, 4, 4, 3, 3, 6, 6, 6, …
$ TACT      <int> 21, 11, 11, 21, 21, 23, 24, 23, 21, 21, 11, 11, 11, 22, 23, …
$ TACTD16   <int> 210, 116, 111, 210, 210, 230, 240, 230, 210, 210, 111, 111, …
$ TP        <fct> Z, 1, 1, Z, Z, Z, Z, Z, Z, Z, 2, 1, 1, Z, Z, Z, Z, 1, 1, Z, …
$ TRANS     <fct> Z, 5, 6, Z, Z, Z, Z, Z, Z, Z, 6, 6, 6, Z, Z, Z, Z, 6, 1, Z, …
$ TRIRIS    <fct> 751501, 750901, 750901, 751431, 751431, 751741, 751741, 7517…
$ TYPC      <fct> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, …
$ TYPFC     <fct> Z, 2, 2, 2, 2, 1, 1, 1, 2, 2, Z, 2, 2, 2, 2, Z, Z, 1, 1, 1, …
$ TYPL      <fct> 1, 6, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
$ TYPMC     <fct> 1, 4, 4, 4, 4, 3, 3, 3, 4, 4, 1, 4, 4, 4, 4, 1, 1, 3, 3, 3, …
$ TYPMR     <fct> 12, 41, 41, 44, 44, 32, 32, 32, 44, 44, 12, 41, 41, 41, 41, …
$ VOIT      <fct> 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, …
$ WC        <fct> Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, Z, …

Les variables sont en format, soit ‘int’ (“integer” - nombres entiers), soit ‘fct’ (“factor”), ou encore ‘dbl’ (“double” - nombres réels). On remarque que la plupart des variables ont des modalités en chiffres et/ou lettres, ce qui signifie qu’il faudra probablement recoder ces modalités pour leur donner des libellés dans nos analyses descriptives (tableaux ou graphiques).

Par ailleurs, certaines variables ont été laissées en format ‘integer’ bien que l’on avait mis l’option stringsAsFactors=TRUE lors du chargement des données, or ces chiffres correspondent bien à des modalités d’une variable catégorielle, il faudra donc le corriger ultérieurement.

Dernière remarque, si on avait eu des valeurs manquantes sur certaines variables, elles se seraient ici affichées avec la modalité NA, cela ne semble pas le cas, à vérifier par la suite. En revanche, on voit parfois des modalités “z” ou “zz”, il faudra vérifier ce qu’elles indiquent.

2.1 Format des données - WIDE ou LONG

La question du format de la table de données est importante, on distingue généralement le format wide du format long :

  • le premier renvoie au cas où chaque ligne correspond a un et un seul individu (ou autre niveau de l’analyse : une entreprise, un ménage, un logement, etc.), et toutes les informations le concernant sont données en colonnes (ce qui peut augmenter rapidement le nombre de colonnes), c’est l’exemple d’une information que l’on a sur plusieurs années, chaque colonne correspondant à l’information de l’année en question ;
  • le second, au contraire, multiplie les lignes pour un seul individu, mais il y a alors moins de colonnes, à partir du même exemple précédent, il y aura cette fois une colonne indiquant l’année et une colonne contenant l’information.

Ici, chaque ligne correspond à un individu auquel est associé un logement, un ménage ou encore une famille ; on est bien dans un format wide. L’unité statistique de base est donc l’individu, mais on peut vouloir choisir de se mettre au niveau logement ou ménage ou famille, pour étudier les caractéristiques de ces unités. Autre exemple, on peut aussi considérer que notre niveau d’analyse est la commune, on verra alors qu’on dispose de plusieurs lignes par commune et si l’on veut garder quelques informations à ce niveau en n’ayant plus qu’une ligne par commune, il faudra sommer ces informations.

Le package tidyverse contient deux fonctions qui permettent de passer d’un format à un autre : pivot_longer() et pivot_wider() présentés en détails ici. Nous aurons l’occasion de les utiliser ultérieurement dans ce cours.

2.2 Sélectionner un champ réduit de la base, séparer les données

Manipuler une base de données, c’est aussi travailler ou créer une table réduite, surtout quand on a des données volumineuses comme ici : c’est donc choisir un champ particulier de la base.

On peut par exemple choisir un champ géographique plus réduit au sein de l’Île-de-France, à partir de la commune : Paris et sa petite couronne.

On peut aussi choisir de séparer les données en créant 2 tables selon l’unité statistique : l’individu ; ou le logement avec la seule personne de référence du ménage.

Comme vous le savez très probablement, dans le langage tidyverse, pour faire des sélections sur les lignes ou observations dans une table de données, on utilise la fonction filter() ; pour faire des sélections sur les colonnes ou variables, on utilise la fonction select() ; pour supprimer des variables, on utilise également select() avec un “-” devant la (ou les) variable(s) à supprimer (dans le langage R de base, on peut aussi utiliser la fonction subset()).

EXERCICES : Créer trois nouvelles bases selon les indications suivantes :

  • la première que vous nommerez “RP_Paris” et qui rassemblera les données pour le seul département de Paris ;
  • la deuxième que nous nommerez “RP_indiv” et qui comprendra les données pour les seules variables décrivant l’individu (et ce sera celle de la personne de référence du ménage) ;
  • la troisième que vous nommerez “RP_final”, qui rassemblera les données pour les départements de Paris et de sa petite couronne, et qui comprendra toutes les variables décrivant l’individu, le logement et enfin les variables géographiques.
RP_Paris <- RP %>% filter(DEPT == "75")

RP_indiv <- RP %>% select("AEMMR", "AGED", "AGER20", "AGEREV","AGEREVQ","ANAI",
                          "ANEMR","APAF","COUPLE","CS1","DIPL","DNAI","EMPL",
                          "ETUD","ILETUD","ILT","IMMI","INAI","INATC","IPONDI",
                          "IRAN","LPRF","LPRM","MOCO","MODV","NA17",
                          "NA5","NAIDT","ORIDT","RECH","SEXE","STAT_CONJ",
                          "STATR","TACT","TACTD16","TP","TRANS")
  
RP_final  <- RP %>% filter(DEPT %in% c("75","92","93","94")) %>% 
                        select(-c("NUMMI","INPERF","DEROU","LIENF","INFAM",
                                  "NE17FR","INPER", "NE24FR","NPERR",   "NE3FR",
                                  "SFM",    "NE5FR", "TYPMC",   "NENFR","TYPMR",
                                  "NUMF","VOIT",    "TYPFC"))

On va dorénavant travailler sur cette dernière table RP_final, on l’enregistre donc dans notre dossier “data”, ainsi que le fichier meta que nous avons modifié précédemments :

# Enregistrement des fichiers
saveRDS(object = RP_final , file = "data/RP_final.Rdata") 
saveRDS(object = meta, file = "data/meta.Rdata")