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 :

Boucle "for" dans un dossier


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut Boucle "for" dans un dossier
    Bonjour, je voudrais utiliser la boucle for pour appliquer des modifications à tous les autres fichiers d'un dossier contenant plusieurs fichiers excel, mais je suis bloqué.
    Voici ou j'en suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    library(gdata)
    #choisir le repertoire de travail 
    setwd("~Documents/Programmer R/Megadataxls")
    # get all the right file names
    file_names = list.files(getwd())
    file_names = file_names[grepl(".xls",file_names)]
     
    #get the read.xls function working
    Megadata = read.xls("connaissement_1_lot1320.xlsx", header=T, stringsAsFactors = F)
     
    #suppression des 7 premieres lignes- debut de modification du fichier excel
    corps <-tail(Megadata,-7)
     
    #suppression de la colonne 7
    corps <-corps[,-7]
     
    #suppression de tous sauf les 7 premieres lignes
    entete<-head(Megadata,7)
     
    #transposition en colonnes de l'entete
    entete <- t(entete)
     
    #suppression des lignes et espace unitil
    entete<-head(entete,3)
    entete <- entete[-2,]
    entete <- entete[,-7]
     
    #enregistrer le fichier entete en csv dans un autre dossier
    setwd("~/Documents/Programmer R/Megadatacsvexport")
    write.table(entete, file = "entete.csv", sep = ",", col.names = NA,
                qmethod = "double")
     
    #importer entete en fichier csv et suppression de la ligne 1 et 2
    entete <- read.csv("entete.csv", header=F)
    entete <- tail(entete,2)
    entete <- tail(entete,1)
     
    #fusion des 2 tableaux les champs vides seront remplace par NA-   Fin des modifications du fichier excel
    Megadata <- cbindX(entete,corps)
     
     
     
    # utilisation de la boucle for pour appliquer les modifications du fichier precedent aux autres - c'est la que ca coince
     
    data.files = list.files()
    for (file in data.files[1]) {
      Megadata1 = read.xls("connaissement_1_lot1320.xlsx", header=T, stringsAsFactors = F)
     
    # get all the right file names
    file_names = list.files(getwd())
    file_names = file_names[grepl(".xls",file_names)]
     
    #suppression des 7 premieres lignes
    corps <-tail(Megadata1,-7)
     
    #suppression de la colonne 7
    corps <-corps[,-7]
     
    #suppression de tous sauf les 7 premieres lignes
    entete<-head(Megadata1,7)
     
    #transposition en colonnes de l'entete
    entete <- t(entete)
     
    #suppression des lignes et espace unitil
    entete<-head(entete,3)
    entete <- entete[-2,]
    entete <- entete[,-7]
     
    #enregistrer le fichier entete en csv dans un autre dossier
    setwd("/home/essis/Documents/Programmer R/Megadatacsvexport")
    write.table(entete, file = "entete.csv", sep = ",", col.names = NA,
                qmethod = "double")
     
    #importer entete en fichier csv et suppression de la ligne 1 et 2
    entete <- read.csv("entete.csv", header=F)
    entete <- tail(entete,2)
    entete <- tail(entete,1)
     
    #fusion des 2 tableaux les champs vides seront remplace par NA
    Megadata2 <- cbindX(entete,corps)
     
    #ajout a Megadata
     
    Megadata = rbind(Megadata, Megadata2)
    }
    Tous les fichiers excel on la même structure, je voudrais les avoir tous dans un seul fichier appelé "Megadata".

    Quelqu'un peut-il m'aider, please !

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Par défaut
    Bonjour,

    il est difficile d'aider sans savoir la différence entre ce qui est attendu/obtenu.
    Si j'ai bien compris, le but est à partir de fichiers qui ont la même structure de base, de les traiter (tous de la même façon), puis de les concaténer dans un seul fichier ?

    Si c'est cela, voilà ce que je propose :

    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    library(gdata)
    #choisir le repertoire de travail
    setwd("~Documents/Programmer R/Megadataxls")
    # get all the right file names
    file_names = list.files(getwd())
    file_names = file_names[grepl(".xls",file_names)]
     
    #On récupère le premier 
    Megadata<-read.xls(file=file_names[1],header=T, stringsAsFactors = F)
     
    #Réaliser le traitement désiré pour l'avoir au format
     
    #Ensuite, on va concaténer au fur et à mesure
    for(i in 2:length(files_names)){
        Meg<-read.xls(file=file_names[i],header=T, stringsAsFactors = F)
        #Mettre au format désiré par le traitement,
        Megadata<-rbind(Megdata,Meg)
    }
     
    #enregistrer le fichier où l'on désire
    setwd("/home/essis/Documents/Programmer R/Megadatacsvexport")
    write.table(Megadata, file = "Megadata.csv", sep = ",")


    J'espère que cela résout votre problème

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut erreur sur boucle FOR
    C'est justement cela, j'ai dans un dossier plusieurs fichiers excel de même structure que je dois modifier et ensuite les concaténer. J'ai pu donc le faire pour un un seul et je dois appliquer cette modification à tous les fichiers contenus dans le dossier, puis ensuite les concaténer.

    Mais j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Unable to open file 'connaissement_1_lot1489.xlsx'.
    Erreur dans xls2sep(xls, sheet, verbose = verbose, ..., method = method,  : 
      Intermediate file '/tmp/RtmpfTTLfA/file74849fa33b.csv' missing!
    De plus : Message d'avis :
    l'exécution de la commande ''/usr/bin/perl' '/home/essis/R/x86_64-pc-linux-gnu-library/3.1/gdata/perl/xls2csv.pl'  'connaissement_1_lot1489.xlsx' '/tmp/RtmpfTTLfA/file74849fa33b.csv' '1'' renvoie un statut 2 
    Erreur dans file.exists(tfn) : argument 'file' incorrect
    Je ne sais plus quoi faire, aidez-moi.

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