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 :

exporter fichier excel


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Par défaut exporter fichier excel
    Bonjour à tous,

    J'ai fait ce code dans R pour calculer la moyenne des colonnes dans plus de 400 fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sapply(dir("C:/Users/fanfa/Desktop/data_csv_Rm/test", full.names = TRUE), function(x) colMeans(read.table(x, header = TRUE, sep = ",")))
    Ça a l'air de fonctionner. Sauf qu'il m'affiche un résultat par fichier à la suite.
    Est-il possible de générer un tableau compilant toutes ces moyennes ? Sachant qu'il y a une difficulté : j'ai 111 colonnes par fichiers avec un nom identique, mais parfois j'ai des colonnes manquantes. Il faudrait donc faire correspondre le nom des colonnes...

    MErci pour votre aide !

  2. #2
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut calculer la moyenne des colonnes de plusieurs fichiers
    Bonjour,

    Je vous conseille de procéder pas à pas :

    Soit deux dataframes correspondant au contenu de deux fichiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    df1 <- data.frame(V1 = c(1,1,1), V2 = c(2,2,2), V3 = c(3,3,3))
    df2 <- data.frame(V1 = c(4,4,4), V3 = c(5,5,5), V4 = c(6,6,6))
    Voyons ce que donne la fonction colMeans() et surtout la structure du résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > str(colMeans(df1))
     Named num [1:3] 1 2 3
     - attr(*, "names")= chr [1:3] "V1" "V2" "V3"
    Si vous souhaitez ranger l'ensemble des résultats dans un tableau, il vaut mieux obtenir un dataframe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > str(data.frame(lapply(df1,mean)))
    'data.frame':   1 obs. of  3 variables:
     $ V1: num 1
     $ V2: num 2
     $ V3: num 3
    Ensuite on peut utiliser la fonction rbind.fill() du package plyr pour concaténer les différents dataframes obtenus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > mean1 <- data.frame(lapply(df1,mean))
    > mean2 <- data.frame(lapply(df2,mean))
    > 
    > library(plyr)
    > rbind.fill(mean1, mean2)
      V1 V2 V3 V4
    1  1  2  3 NA
    2  4 NA  5  6
    On peut alors généraliser le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    setwd("D:/data")
    liste_fichiers <- list.files(pattern="csv")
    n=length(liste_fichiers)
    dftot=data.frame()
    for (i in 1:n) 
      {
      df <- read.csv(liste_fichiers[i])
      mean_fichier <- data.frame(lapply(df,mean))
      dftot <- rbind.fill(dftot, mean_fichier)
      }
    dftot
    Ou avec les fonctions de liste de R :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rbind.fill(lapply(list.files(pattern="csv"), 
                      function(x) data.frame(lapply(read.csv(x),mean))))
    Cordialement,

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Par défaut
    Bonjour mgdondon,

    Merci beaucoup pour cette réponse très complète.

    En appliquant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    setwd("C:/Users/fanfa/Desktop/data_csv_Rm/test")
    liste_fichiers <- list.files(pattern="txt")
    n=length(liste_fichiers)
    dftot=data.frame()
    for (i in 1:n) 
      {
      df <- read.csv(liste_fichiers)
      mean_fichier <- data.frame(lapply(df,mean))
      dftot <- rbind.fill(dftot, mean_fichier)
      }
    dftot


    J'ai obtenu le message suivant : "Erreur : impossible de trouver la fonction "rbind.fill"

    J'ai trouvé la solution en installant le pack "plyr".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    install.packages("plyr")
    library("plyr")


    Par ailleurs, un dernier détail : je souhaiterais que la ligne porte le nom du fichier, et non 1, 2, 3 etc... Cela est-il possible ?
    Merci pour t'as précieuse aide !

  4. #4
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut calculer la moyenne des colonnes de plusieurs fichiers
    Bonjour fanfanus,

    Oui, tout à fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mean_fichier <- data.frame(fichier=liste_fichiers[i],lapply(df,mean))
    Cordialement,

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Par défaut
    Merci pour tout.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 39
    Par défaut
    Bonjour,

    Me revoilà, si en lieu est place de la moyenne, je souhaite calculer le 75éme percentile.
    Je pense qu'il s'agit de la fonction "quantile(x, probs= 0.75)".

    si je reprend le code initial ça donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    liste_fichiers <- list.files(pattern="txt")
    n=length(liste_fichiers)
    dftot=data.frame()
    for (i in 1:n) 
      {
      df <- read.csv(liste_fichiers[i], sep="\t")
      quant <- quantile(df, probs = 0.75, na.rm = TRUE)
      mean_fichier <- data.frame(fichier=liste_fichiers[i],lapply(df,quant))
      dftot <- rbind.fill(dftot, mean_fichier)
      }
    dftot
    Mais j'ai un message d’erreur : "Error in (1 - h) * qs[i] : argument non numérique pour un opérateur binaire". Je dois pas avoir la bonne matrice ?

    Par ailleurs, j'ai vu que l'on peut choisir l'algorythme de quantile (Type 1 à 9, 7 par défaut, lequel choisir ?).


    Une piste de solution ?

    Merci par avance.

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

Discussions similaires

  1. Exporter fichier Excel vers XML
    Par ferrero dans le forum Format d'échange (XML, JSON...)
    Réponses: 12
    Dernier message: 11/05/2009, 18h01
  2. Export fichier Excel
    Par Student3010 dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2008, 16h34
  3. probleme exporter fichier excel
    Par hebh dans le forum Documents
    Réponses: 5
    Dernier message: 17/05/2008, 11h11
  4. Exporter fichier Excel en .csv
    Par pierre.coudert dans le forum Windows
    Réponses: 7
    Dernier message: 27/02/2007, 13h45
  5. Réponses: 6
    Dernier message: 30/03/2006, 18h11

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