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 :

Sélectionner dataframe avec son nom - boucle for


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut Sélectionner dataframe avec son nom - boucle for
    Bonjour à tous,

    j'ai plusieurs dataframe sur lesquels je souhaiterais effectuer les mêmes opérations.
    Plutôt que de faire cela séparément, j'aimerais créer une boucle for.

    Imaginons que j'ai trois dataframe sur lesquels je souhaite faire les mêmes opérations: df1 ; df2 et df3.

    J'avais pensé à quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    list_df=c("df1","df2","df3")
    for (i in list_df){
     
    write.csv2(i, file=i)
    DF=read.csv2(file=i)
    #puis je peux faire mes traitements statistiques
     
    write.csv2(DF, file=paste0("data_frame_apres_traitement",i))
    }
    Mais ça ne fonctionne pas. De plus, ce n'est pas l'idéal pour moi d'avoir à exporter en csv le df, puis le lire et enfin le sauvegarder à nouveau en csv après les traitements.

    Avez-vous une solution?

    En espérant que j'ai été clair...

    Merci!
    Guillaume

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    tu peux utiliser la fonction get pour récupérer ton data.frame dans un objet temporaire et ensuite faire les manips dessus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    list_df=c("df1","df2","df3")
    for (i in list_df){
      tab <- get(i)
      ... # on travaille sur tab par la suite
      }
    Après il va peut-être falloir faire attention aux environnements.

    cdlt

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2015
    Messages : 10
    Points : 9
    Points
    9
    Par défaut
    Bonjour

    merci beaucoup, je ne connaissais pas cette fonction "get" a priori bien utile!

    Bonne journée

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2020
    Messages : 3
    Points : 6
    Points
    6
    Par défaut Problème semblable, mais toujours pas réglé
    Bonjour,
    j'ai le même problème , mais je n'arrive pas à le régler avec ce code. En fait, c'est comme si la boucle écrasait les résultats précédents à chaque fois. Je me retrouve donc avec les résultats de mon dernier data.frame seulement. Donc, j'ai fait ma liste contenant mes 23 dataframes. Ensuite j'ai créé ma boucle dans laquelle j'ai ajouté la fonction get(i), suivi du code que je souhaite faire (qui n'est toujours pas au point d'ailleurs ). Mais seuls les résultats de mon derniers data.frame se retrouve dans l'objet "tab". Savez-vous quel est le problème?

    Merci!
    Andreanne

  5. #5
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,
    Citation Envoyé par tigremignon Voir le message
    Bonjour,
    j'ai le même problème , mais je n'arrive pas à le régler avec ce code. En fait, c'est comme si la boucle écrasait les résultats précédents à chaque fois. Je me retrouve donc avec les résultats de mon dernier data.frame seulement. Donc, j'ai fait ma liste contenant mes 23 dataframes. Ensuite j'ai créé ma boucle dans laquelle j'ai ajouté la fonction get(i), suivi du code que je souhaite faire (qui n'est toujours pas au point d'ailleurs ). Mais seuls les résultats de mon derniers data.frame se retrouve dans l'objet "tab". Savez-vous quel est le problème?
    Le problème vient du fait qu'à chaque itération le tableau tab est remplacé par ce qui est obtenu par get(i), donc oui le tableau est écrasé à chaque fois. Une fois la boucle finit il ne reste que le tab obtenu lors de la dernière itération.
    Après tout dépend de ce que tu cherches à faire. Par exemple on peut stocker chaque tab dans un élément d'une liste ou alors agréger par ligne les différents tableaux pour n'en faire plus qu'un.

    cdlt

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

Discussions similaires

  1. [Batch] Pb nom de fichier avec espaces dans boucle "FOR /F"
    Par HektorParis dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 14/03/2019, 16h35
  2. [Toutes versions] Sélectionner une variable avec son nom dans un string
    Par tmlpqsdpmdlc dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/03/2015, 16h09
  3. Réponses: 1
    Dernier message: 31/05/2006, 17h59
  4. Ksh, problème avec une simple boucle for
    Par herzleid dans le forum Linux
    Réponses: 4
    Dernier message: 22/03/2006, 14h45
  5. Ouverture d'un fichier avec son nom
    Par bonjour69 dans le forum C
    Réponses: 23
    Dernier message: 15/10/2005, 19h36

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