IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Importation fichier csv avec nom variable


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Importation fichier csv avec nom variable
    Bonjour à tous !

    Je voudrais savoir s'il était possible d'importer des fichiers (peu importe le format) sur R avec comme nom du fichier le nom d'une variable.
    En effet, j'aimerais que mon programme R fonctionne pour plusieurs fichiers.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #import d'un dataframe nommé.
    df <- read.csv("/Users/moi/Documents/mondataframe.csv",header=TRUE, sep=",")
     
    #création de ma variable
    ma_variable <- unique(df$colonne2)
     
    #import de mon fichier avec nom variable
    fichier <- read.csv("/Users/moi/Documents/ma_variable.csv",header=TRUE, sep=",")
    Ma question est donc : est-il possible d'importer un fichier avec, comme nom du fichier, le texte stocké dans une variable ? Si oui, quelle est la syntaxe à utiliser ? (à la place de ma_variable dans le chemin d'import)

    Je vous remercie !
    Bonne journée

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Bien sûr, c'est possible. Ce que ton code n'indique pas, c'est si ton unique renvoie une ou plusieurs valeurs. S'il y a une seule valeur, c'est tout simple, il suffit de concaténer son contenu avec le reste du chemin (répertoire, extension). L'objet texte ainsi créé sert de premier argument à la fonction read.csv.
    S'il y a plusieurs valeurs dans le vecteur créé par unique, la recette reste la même, concaténer les éléments "fixes" (répertoire, extension) avec paste et on obtient encore un vecteur. Il faut itérer sur chacun de ses éléments, ce qui n'est pas compliqué en soi mais pour récupérer l'import dans des objets de noms différents, le code sera peut-être plus intuitif avec une boucle.
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup pour ta réponse !

    En effet j'ai oublié de préciser que mon unique renvoie plusieurs valeurs.
    J'aimerai ne pas avoir a écrire ce qui ressort de ma variable "unique". J'aimerai qu'en écrivant le nom de la variable le programme le fasse automatiquement.
    Syntaxiquement parlant je n'ai pas compris comment je peux concatener ma variable dans mon chemin ...

    Serait-il possible, sans vouloir que tu me mâches le travail, de reprendre mon exemple pour que je comprenne mieux ?
    sans itération ou boucle. En faisant comme si mon unique ressortait une seule valeur. Car je n'ai pas compris le principe de "concatener les éléments fixes avec paste" ...

    Je te remercie.

  4. #4
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Ce que je voulais dire, c'est que si ton unique renvoie une seule valeur, mettons "mondataframe", tu ajoutes les éléments fixes avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    paste0("/Users/moi/Documents/", ma_variable, ".csv")
    Si tu as un vecteur avec plusieurs valeurs, paste0 va concaténer sur chaque élément du vecteur, donc même logique. Restera à ajouter la boucle.
    Bon courage.
    Olivier

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Faire cette boucle n'est pas suffisant pour récupérer les différentes valeurs de ma variable "unique" ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #ma_variable
    ma_variable=unique(df$colonne2) #cela me retourne 3 valeurs. #Ces 3 valeurs sont les noms de 3 fichiers que j'ai dans mes Documents, et que j'aimerai ouvrir, soit dans le même df soit dans 3 df différents. (ici j'ai essayé dans le même df (mon_df))
     
    #ma boucle 
    for (i in 1:length(ma_variable)){
      mon_df <- read.csv(paste0("/Users/Documents/",ma_variable[i],".csv"),header=TRUE, sep=",",na.strings = "NA")
    }
     
    #length(ma_variable)=3
    Cette boucle stocke uniquement la dernière valeur de ma_variable (#ma_variable[3])

  6. #6
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    C'est logique puisqu'à chaque itération de la boucle tu écris dans le même objet, il est remplacé à chaque itération.
    Par contre, si dans la boucle, tu fais un rbind de ton data.frame et du résultat de l'import, ça va bien tout accumuler.
    Cela dit, il y a un moyen beaucoup plus simple de faire ça : read.csv accepte les noms incomplets read.csv("/Users/Documents/*.csv", header=TRUE, sep=",",na.strings = "NA") devrait lire tous les fichiers d'extension CSV de ton répertoire à la suite, et empiler automatiquement le tout dans ton data.frame.
    Bon courage.
    Olivier

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Exact ! je vous remercie ... j'ai pas été très futfut pour le coup.

    Malheureusement je ne peux pas faire de rbind car mes fichiers n'ont parfois pas le même nombre de colonne...
    Il me faudrait donc pouvoir les ouvrir tous séparément dans des data.frame différents. Cependant la technique du "*.csv" ne marche pas...

  8. #8
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Importation fichier csv avec nom variable
    Bonjour,

    Vous pouvez utiliser la fonction bind_rows() du package dplyr si vos fichiers n'ont pas toutes les colonnes en commun et que vous souhaitez les importer dans le même dataframe.

    Cordialement,

  9. #9
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Etant donné que les colonnes ne sont pas les mêmes je ne souhaite pas importer dans le même data.frame non...
    J'aimerai importer un fichier par data.frame

    Je vous remercie tout de même pour votre réponse. Elle me sera peut être utile un jour !

    Justine

  10. #10
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Importation fichier csv avec nom variable
    Il me faudrait donc pouvoir les ouvrir tous séparément dans des data.frame différents.
    Vous pouvez générer un nom de dataframe dans votre boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (i in 1:length(ma_variable)){
      assign(paste0("df_",ma_variable[i]), read.csv(paste0("/Users/Documents/",ma_variable[i],".csv")))
    }
    Cordialement,

  11. #11
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2017
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    WOW

    Merci beaucoup !! c'est parfait

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Importer fichier CSV avec nom variable
    Par aurelkb dans le forum SSIS
    Réponses: 2
    Dernier message: 08/08/2013, 17h27
  2. [AC-2002] Import fichier csv avec parametre
    Par ratapoilu dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/04/2012, 11h28
  3. Importer fichier csv avec changement de nom
    Par devilprinprin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2010, 08h24
  4. Problème d'import fichier csv avec PostgreSQL
    Par Aztecks dans le forum Ruby
    Réponses: 10
    Dernier message: 10/11/2009, 11h42
  5. Ouvrir un fichier Excel avec nom variable
    Par Mechsangoku dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/10/2009, 12h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo