(ENG) SuSoTidyR is an R package designed to facilitate the import, cleaning, and transformation of data exported from Survey Solutions. This package helps structure the data in a tidy format, making it easier to analyze and work with. It also includes functions to handle unwanted variables generated by configuration errors, such as missing response limits in list-type questions.
(FR) SuSoTidyR est un package R conçu pour faciliter l’importation, le nettoyage et la transformation des données exportées depuis Survey Solutions. Ce package aide à structurer les données dans un format tidy, rendant leur analyse et manipulation plus simples. Il inclut également des fonctions pour gérer les variables inutiles générées par des erreurs de configuration, comme l’absence de limite de réponses dans les questions de type liste.
-
import_metadata: Imports metadata and variable labels from Survey Solutions
.do
files. -
import_results: Imports main survey results along with associated files, such as rosters, assignments, and interviews.
-
clean_lists: Removes unwanted columns containing only specific missing values (e.g.,
-999999999
,##N/A##
). -
replace_na_values: Replaces specific missing values with
NA
to standardize missing data. -
values_to_labels: Replaces coded values with their corresponding labels for easier interpretation.
-
import_metadata : Importe les métadonnées et les labels des variables depuis les fichiers
.do
de Survey Solutions. -
import_results : Importe les résultats d’enquête principaux ainsi que les fichiers associés, comme les rosters, les assignments et les interviews.
-
clean_lists : Supprime les colonnes inutiles contenant uniquement des valeurs manquantes spécifiques (e.g.,
-999999999
,##N/A##
). -
replace_na_values : Remplace les valeurs spécifiques de données manquantes par des
NA
pour uniformiser les données. -
values_to_labels : Remplace les valeurs codées par leurs labels pour les rendre plus interprétables.
Install the package directly from GitHub using the remotes
package:
Installez le package directement depuis GitHub avec le package remotes
:
# If remotes is not installed / Si remotes n'est pas installé
install.packages("remotes")
#> Installation du package dans 'C:/Users/noe.barthelemy/AppData/Local/Temp/RtmpsvJ74i/temp_libpath495c6808196f'
#> (car 'lib' n'est pas spécifié)
# Install SuSoTidyR from GitHub / Installer SuSoTidyR depuis GitHub
remotes::install_github("noebarthelemy/SuSoTidyR")
#> Downloading GitHub repo noebarthelemy/SuSoTidyR@HEAD
#> Installation du package dans 'C:/Users/noe.barthelemy/AppData/Local/Temp/RtmpsvJ74i/temp_libpath495c6808196f'
#> (car 'lib' n'est pas spécifié)
Here is an example workflow with SuSoTidyR to import, clean, and organize data from a Survey Solutions survey.
Voici un exemple de flux de travail avec SuSoTidyR pour importer, nettoyer et organiser les données d’une enquête Survey Solutions.
Use import_metadata
to load Survey Solutions metadata from a folder
containing .do
files.
Utilisez import_metadata
pour charger les métadonnées de Survey
Solutions depuis un dossier contenant des fichiers .do
.
library(SuSoTidyR)
library(tidyverse)
#> ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
#> ✔ dplyr 1.1.4 ✔ readr 2.1.5
#> ✔ forcats 1.0.0 ✔ stringr 1.5.1
#> ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
#> ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
#> ✔ purrr 1.0.2
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#> ✖ dplyr::filter() masks stats::filter()
#> ✖ dplyr::lag() masks stats::lag()
#> ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(here)
#> here() starts at \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR
# Path to exported metadata folder / Chemin vers le dossier de métadonnées exportées
metadata <- import_metadata(here("example_data"))
#> Démarrage de l'importation des nomenclatures... Cela peut prendre quelques minutes.
#> Variable S1ASSO_DOM a été remplacée par les libellés de la catégorie.
#> Variable S1ASSO_SOUSDOM a été remplacée par les libellés de la catégorie.
#> Variable S1AD_COM a été remplacée par les libellés de la catégorie.
#> Variable S1CONT_FONCTION a été remplacée par les libellés de la catégorie.
head(metadata)
Use import_results
to import main survey results along with associated
files, by specifying the questionnaire variable name and files to
import.
Utilisez import_results
pour importer les résultats de l’enquête, y
compris les rosters et les autres fichiers associés, en spécifiant le
nom de la variable de questionnaire et les fichiers à importer.
# Import results with rosters / Importer les résultats avec les rosters
# Import results with rosters etc / Importer les résultats avec les rosters etc
import_results(
Variable_Questionnaire = "ESS_2024",
Importer_Rosters = TRUE,
Importer_AssignmentsValues = TRUE,
Importer_InterviewsValues = TRUE,
dossier_resultats = here("example_data")
)
#> Importation terminée.
#> Nombre de rosters importés : 6
#> Fichiers importés avec succès :
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/ESS_2024.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/Roster_AvantApres.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/Roster_AvantApres_2.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/Roster_AvantApres1.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/Roster_leviers.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/S3_RosterDuree.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/S3_RosterImpacts.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/assignment__actions.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/interview__actions.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/interview__comments.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/interview__diagnostics.tab
#> - \\isee.local/public/utilisateurs/USER/Noe.Barthelemy/Noe_Barthelemy_ISEE/R/SuSoTidyR/example_data/interview__errors.tab
#> Tous les fichiers ont été importés avec succès.
When list-type questions are configured without limits in the number of
answers, Survey Solutions may generate hundreds of columns containing
only missing values. Use clean_lists
to remove these unnecessary
columns from the results and optionally from the metadata.
Lorsque des questions de type liste sont configurées sans limites de
nombre de réponses, Survey Solutions peut générer des centaines de
colonnes contenant uniquement des valeurs manquantes. Utilisez
clean_lists
pour supprimer ces colonnes inutiles dans les résultats et
éventuellement dans la nomenclature.
# Clean unnecessary columns in results / Nettoyer les colonnes indésirables du tableau de résultats
ESS_2024_clean <- ESS_2024 %>%
clean_lists()
# Clean some roster data / Nettoyer les colonnes indésirables du tableau de résultats d'un des rosters :
ESS_2024_Roster_leviers_clean <- ESS_2024_Roster_leviers %>%
clean_lists()
# Clean the metadata based on removed columns / Nettoyer la nomenclature en fonction des colonnes supprimées
# WARNING : USE THE NON CLEANED VERSION OF THE DATASET (ESS_2024 and not ESS_2024_clean) OTHERWISE THIS WILL NOT WORK.
# ATTENTION : UTILISEZ LA VERSION NON NETTOYEE DU JEU DE DONNEES (ESS_2024 ET NON PAS ESS_2024_clean) SINON CELA NE FONCTIONNERA PAS :
nomenclature_clean <- metadata %>%
clean_lists(data = list(ESS_2024, ESS_2024_Roster_AvantApres))
Values like -999999999
or ##N/A##
may indicate missing data. Use
replace_na_values
to standardize these as NA
.
Certaines valeurs comme -999999999
ou ##N/A##
peuvent être utilisées
pour indiquer des données manquantes. Utilisez replace_na_values
pour
standardiser ces valeurs manquantes en les remplaçant par NA
.
# Replace specific missing values with NA / Remplacer les valeurs manquantes spécifiques par NA
ESS_2024_NA_clean <- ESS_2024_clean %>%
replace_na_values()
To make the data more interpretable, replace coded values in the results table with their associated labels from the metadata.
Pour faciliter l’interprétation, vous pouvez remplacer les valeurs codées dans le tableau de résultats par les labels associés à partir de la nomenclature.
# Replace coded values with labels / Remplacer les valeurs codées par leurs labels
ESS_2024_labeled <- ESS_2024_NA_clean %>%
values_to_labels(nomenclature_clean, columns = "all")
#> Valeurs remplacées par labels pour les colonnes : interview__key, interview__id, S1ASSO_NOM, S1ASSO_RID, S1_CONFIRMATION_NOM, S1_NOUVEAU_NOM, S1ASSO_DOM, S1ASSO_SOUSDOM, S1AD, S1AD_COMP, S1AD_CP, S1AD_COM, S1CONT_NOM, S1CONT_PRENOM, S1CONT_FONCTION, S1ASSO_FONCTION_AUTRE, S1CONT_MAIL, S1CONT_TEL, VAR_Total_Avant, VAR_Total_Apres, Total_NonReponse, Infos_dispos, Demande_contact, Total_NonReponse_1, Infos_dispos_1, Demande_contact_1, Nb_benevoles_av, Nb_benevoles_ap, Profil_benef_av__0, Profil_benef_av__0c, Profil_benef_av__1, Profil_benef_av__1c, Profil_benef_av__2, Profil_benef_av__2c, Profil_benef_av__3, Profil_benef_av__3c, Nb_benef_av__0, Nb_benef_av__0c, Nb_benef_av__1, Nb_benef_av__1c, Nb_benef_av__2, Nb_benef_av__2c, Nb_benef_av__3, Nb_benef_av__3c, Nb_beneficiares_av, Nb_beneficiares_ap, Total_NonReponse_Roster2, Infos_dispos_2, Demande_contact_2, S3Q1_ASSOLIK, S3Q2_ASSOARRET1, S3Q2_ASSOARRET2__1, S3Q2_ASSOARRET2__2, S3Q3_IMPACT__1, S3Q3_IMPACT__2, S3Q3_IMPACT__3, S3Q3_IMPACT__4, S3Q3_IMPACT__5, S3Q3_IMPACT__6, S3Q3_IMPACT__7, S4Q1_FREINS__1, S4Q1_FREINS__2, S4Q1_FREINS__3, S4Q1_FREINS__4, S4Q1_FREINS__5, S4Q1_FREINS__6, S4Q1_FREINS__7, S4Q2_PrecisionFreins, S4Q3_DIFFIC, S5Q1_LEVIERS__1, S5Q1_LEVIERS__2, S5Q1_LEVIERS__3, S5Q1_LEVIERS__4, S5Q1_LEVIERS__5, S5Q1_LEVIERS__6, S5Q1_LEVIERS__7, S5Q1_LEVIERS__8, S5Q1_LEVIERS__9, S5Q1_LEVIERS__10, S5Q1_LEVIERS__11, S5Q2_SOUTFINCOMPL__1, S5Q2_SOUTFINCOMPL__2, S5Q2_SOUTFINCOMPL__3, S5Q2_SOUTFINCOMPL__4, S5Q2_SOUTFINCOMPL__5, S5Q2_SOUTFINCOMPL__6, S5Q2_AUCUNRAISONS, S5Q2bis_PrecisionSoutien, S6Q1_RESSENTILIK, S6Q2_RETOURAVCRISE, S6Q3_BESOINSPRIO__0, S6Q3_BESOINSPRIO__0c, S6Q3_BESOINSPRIO__1, S6Q3_BESOINSPRIO__1c, S6Q3_BESOINSPRIO__2, S6Q3_BESOINSPRIO__2c, S6Q5_CSQFINASSO, S6Q4_EXPSUPPL, sssys_irnd, has__errors, interview__status, assignment__id
Here’s a full example workflow with SuSoTidyR:
Voici un exemple complet de flux de travail avec SuSoTidyR :
library(SuSoTidyR)
library(tidyverse)
library(here)
# Path to exported metadata folder / Chemin vers le dossier de métadonnées exportées
metadata <- import_metadata(here("example_data"))
#> Démarrage de l'importation des nomenclatures... Cela peut prendre quelques minutes.
#> Variable S1ASSO_DOM a été remplacée par les libellés de la catégorie.
#> Variable S1ASSO_SOUSDOM a été remplacée par les libellés de la catégorie.
#> Variable S1AD_COM a été remplacée par les libellés de la catégorie.
#> Variable S1CONT_FONCTION a été remplacée par les libellés de la catégorie.
# Import results with rosters etc / Importer les résultats avec les rosters etc
import_results(
Variable_Questionnaire = "ESS_2024",
Importer_Rosters = TRUE,
Importer_AssignmentsValues = TRUE,
Importer_InterviewsValues = TRUE,
dossier_resultats = here("example_data")
)
# Clean unnecessary columns in results / Nettoyer les colonnes indésirables du tableau de résultats
ESS_2024_clean <- ESS_2024 %>%
clean_lists()
# Clean some roster data / Nettoyer les colonnes indésirables du tableau de résultats d'un des rosters :
ESS_2024_Roster_AvantApres_clean <- ESS_2024_Roster_AvantApres %>%
clean_lists()
# Clean the metadata based on removed columns / Nettoyer la nomenclature en fonction des colonnes supprimées
# WARNING : USE THE NON CLEANED VERSION OF THE DATASET (ESS_2024 and not ESS_2024_clean) OTHERWISE THIS WILL NOT WORK.
# ATTENTION : UTILISEZ LA VERSION NON NETTOYEE DU JEU DE DONNEES (ESS_2024 ET NON PAS ESS_2024_clean) SINON CELA NE FONCTIONNERA PAS :
nomenclature_clean <- metadata %>%
clean_lists(data = list(ESS_2024, ESS_2024_Roster_AvantApres))
# Replace specific missing values with NA / Remplacer les valeurs manquantes spécifiques par NA
ESS_2024_NA_clean <- ESS_2024_clean %>%
replace_na_values()
# Replace coded values with labels / Remplacer les valeurs codées par leurs labels
ESS_2024_labeled <- ESS_2024_NA_clean %>%
values_to_labels(nomenclature_clean, columns = "all")
#> Valeurs remplacées par labels pour les colonnes : interview__key, interview__id, S1ASSO_NOM, S1ASSO_RID, S1_CONFIRMATION_NOM, S1_NOUVEAU_NOM, S1ASSO_DOM, S1ASSO_SOUSDOM, S1AD, S1AD_COMP, S1AD_CP, S1AD_COM, S1CONT_NOM, S1CONT_PRENOM, S1CONT_FONCTION, S1ASSO_FONCTION_AUTRE, S1CONT_MAIL, S1CONT_TEL, VAR_Total_Avant, VAR_Total_Apres, Total_NonReponse, Infos_dispos, Demande_contact, Total_NonReponse_1, Infos_dispos_1, Demande_contact_1, Nb_benevoles_av, Nb_benevoles_ap, Profil_benef_av__0, Profil_benef_av__0c, Profil_benef_av__1, Profil_benef_av__1c, Profil_benef_av__2, Profil_benef_av__2c, Profil_benef_av__3, Profil_benef_av__3c, Nb_benef_av__0, Nb_benef_av__0c, Nb_benef_av__1, Nb_benef_av__1c, Nb_benef_av__2, Nb_benef_av__2c, Nb_benef_av__3, Nb_benef_av__3c, Nb_beneficiares_av, Nb_beneficiares_ap, Total_NonReponse_Roster2, Infos_dispos_2, Demande_contact_2, S3Q1_ASSOLIK, S3Q2_ASSOARRET1, S3Q2_ASSOARRET2__1, S3Q2_ASSOARRET2__2, S3Q3_IMPACT__1, S3Q3_IMPACT__2, S3Q3_IMPACT__3, S3Q3_IMPACT__4, S3Q3_IMPACT__5, S3Q3_IMPACT__6, S3Q3_IMPACT__7, S4Q1_FREINS__1, S4Q1_FREINS__2, S4Q1_FREINS__3, S4Q1_FREINS__4, S4Q1_FREINS__5, S4Q1_FREINS__6, S4Q1_FREINS__7, S4Q2_PrecisionFreins, S4Q3_DIFFIC, S5Q1_LEVIERS__1, S5Q1_LEVIERS__2, S5Q1_LEVIERS__3, S5Q1_LEVIERS__4, S5Q1_LEVIERS__5, S5Q1_LEVIERS__6, S5Q1_LEVIERS__7, S5Q1_LEVIERS__8, S5Q1_LEVIERS__9, S5Q1_LEVIERS__10, S5Q1_LEVIERS__11, S5Q2_SOUTFINCOMPL__1, S5Q2_SOUTFINCOMPL__2, S5Q2_SOUTFINCOMPL__3, S5Q2_SOUTFINCOMPL__4, S5Q2_SOUTFINCOMPL__5, S5Q2_SOUTFINCOMPL__6, S5Q2_AUCUNRAISONS, S5Q2bis_PrecisionSoutien, S6Q1_RESSENTILIK, S6Q2_RETOURAVCRISE, S6Q3_BESOINSPRIO__0, S6Q3_BESOINSPRIO__0c, S6Q3_BESOINSPRIO__1, S6Q3_BESOINSPRIO__1c, S6Q3_BESOINSPRIO__2, S6Q3_BESOINSPRIO__2c, S6Q5_CSQFINASSO, S6Q4_EXPSUPPL, sssys_irnd, has__errors, interview__status, assignment__id
Contributions are welcome! If you have suggestions, ideas for improvement, or if you encounter any issues, feel free to create an issue or submit a pull request on GitHub.
Les contributions sont les bienvenues ! Si vous avez des suggestions, des idées d’amélioration ou si vous rencontrez des problèmes, n’hésitez pas à créer une issue ou à soumettre une pull request sur GitHub.