Skip to content

SuSoTidyR is an R package for importing, cleaning, and organizing data from Survey Solutions exports. It converts metadata and survey results into a tidy format, simplifies handling of missing values, replaces coded values with labels, and removes unnecessary variables, optimizing data workflows for Survey Solutions users.

Notifications You must be signed in to change notification settings

NoeBarthelemy/SuSoTidyR

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SuSoTidyR

(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.

Main Features (ENG)

  • 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.

Fonctionnalités principales (FR)

  • 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.

Installation

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é)

Usage / Utilisation

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.

1. Import Metadata / Importer les Métadonnées

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)

2. Import Survey Results / Importer les Résultats de l’Enquête

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.

3. Clean Unnecessary Columns / Nettoyer les Colonnes Indésirables

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))

4. Replace Specific Missing Values / Remplacer les Valeurs Manquantes Spécifiques

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()

5. Replace Coded Values with Labels / Remplacer les Valeurs Codées par leurs Labels

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

Full Example / Exemple Complet

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

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.

About

SuSoTidyR is an R package for importing, cleaning, and organizing data from Survey Solutions exports. It converts metadata and survey results into a tidy format, simplifies handling of missing values, replaces coded values with labels, and removes unnecessary variables, optimizing data workflows for Survey Solutions users.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published