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

  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.

  7. #7
    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
    J'ai également testé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    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")
      mean_fichier <- data.frame(fichier=liste_fichiers[i],lapply(df, quantile, probs= 0.75, na.rm=TRUE))
      dftot <- rbind.fill(dftot, mean_fichier)
      }
    dftot
    J'obtiens :
    "Error in quantile.default(X[[i]], ...) : factors are not allowed"...

  8. #8
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut quantile
    Bonjour,

    Votre dernier code est correct. Le message d'erreur indique qu'au moins une des variables est de type factor, ce qui n'est pas accepté par la commande quantile().

    Vous pouvez vérifier le type de vos variables en utilisant la commande str().

    Cordialement,

  9. #9
    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
    Cela signifie qu'il y aurait des valeurs non numériques dans mes colonnes ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'data.frame':   4083 obs. of  1 variable:
     $ M1.M2.M3.A1.A2.A3.F1.F2.F3.F4.F5.F6.F7.S1.S2.S3.S4.S5.G0.S6.S7.S8.S9.S10.D1.D2.D3.D4.Ca01.Vl1.Vl2.Vl3.Ca02.Ca03.Vl4.Vl5.Vl6.Ca04.N3.N4.Pln7.Pln8.Pln10.R5.C02.Cms7.Cms5.Cms3.Cms1.C01.Z5.Z4.Z3.Z2.Z1.BZ1.BZ2.BZ3.BZ4.BZ5.Dao1.Dao2.Dao3.B6.B5.B4.B3.B2.B1.Cmi1.Cmi3.Cmi5.H3.H1.H0.M0.H6.H4.Dao4.Dao5.Dao6.B12.B11.B10.B9.B8.B7.BZ6.BZ7.BZ8.BZ9.BZ10.Z11.Z10.Z9.Z8.Z7.R2.Pln1.Pln2.Pln3.Pln4.Pln5.N1.N2.Pps01.Lc2.Lc5: Factor w/ 4083 levels "0.000110057518824647,0.0276881936648927,0.0275957674876747,0.981790557497422,0.75942692499867,0.845253975514884,2.4525103478650"| __truncated__,..: 3969 3980 3982 3957 3881 3700 3266 2473 1417 501 ...
    >
    Je ne comprend pas bien car mes fichiers sont constitué de colonnes avec une entête et des valeurs numériques.
    Il y a des données manquantes indiquées "NA", c'est pour cela que j'ai mis : "na.rm=TRUE".

    Quel est le pb ?

  10. #10
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut Import fichier
    Les deux lignes que vous avez collées indiquent que le fichier n'a pas été importé correctement : vous avez une seule variable qui est la concaténation de l'ensemble des variables. Vérifiez le format de votre fichier pour choisir la fonction d'import appropriée.

    Cordialement,

  11. #11
    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, c'est réglé. En fait, il fallait rajouter :"na.strings = "NaN""

    Merci une fois de plus pour ton aide. Je dois avouer que verbaliser mes blocages sur ce forum, me permet de les régler en partie avant meme d'envoyer le message !

  12. #12
    Membre Expert
    Inscrit en
    Novembre 2009
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 707
    Par défaut
    Bien poser une question c'est commencer à y répondre...

    Cordialement,

+ 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