Partage
  • Partager sur Facebook
  • Partager sur Twitter

Aide svp : importation fichier txt sous R

Sujet résolu
    16 mai 2022 à 14:44:19

    Bonjour,
    je suis débutant sur R, s'il vous j'ai besoin de votre aide, j'ai des données dans un fichier txt, les chiffres sont séparés par des espaces et sont pas du tout organisé, j'aimerai importer ces chiffre d'une façon qui me permet d'avoir 115 lignes décrites par 19 variables, j'ai pensé à faire une boucle mais je ne sais pas comment l'appliquer, si quelqu'un peut m'aider j'en serai très reconnaissant svp.
    • Partager sur Facebook
    • Partager sur Twitter
      16 mai 2022 à 15:39:02

      Bonjour,

      Déplacement vers un forum plus approprié

      Le sujet est déplacé de la section Base de données vers la section Autres langages (VBA, Ruby,...)

      Manque de précisions

      Afin d'obtenir de l'aide et une solution à votre problème, il est fortement recommandé de présenter clairement l'état actuel du problème en nous fournissant :

      • Un descriptif clair et précis du problème avec un exemple de données
      • La tentative actuelle de résolution que vous avez effectué
      • Le résultat attendu et le résultat actuel
      • Toutes pistes de recherches pouvant aider à la résolution
      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        16 mai 2022 à 15:48:44

        je m'excuse de ne pas avoir fourni plus d'infos, voici une aperçu de mon jeu de données fichier .txt :

        moi je veux l'importer sur R et qu'il contienne 19 variables et 115 lignes comme ça :

        j'ai essayé toutes les fonctions d'importation sur R et tous les arguments de la fonction read.table en vain, j'ai pensé à une boucle mais je ne sais pas comment l'appliquer. merci d'avance

        • Partager sur Facebook
        • Partager sur Twitter
          16 mai 2022 à 16:33:59

          Une chose est sûre c'est qu'il s'agit d'un format texte à largeur fixe (FWF).

          Je pense qu'avec readr_fwf tu devrais t'en sortir ...

          Exemple ici : Lire un fichier texte à largeur fixe dans R – Acervo Lima

          Et la doc : Read a fixed width file into a tibble — read_fwf • readr (tidyverse.org)

          -
          Edité par Benzouye 16 mai 2022 à 16:36:14

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            16 mai 2022 à 16:42:43

            considère ton fichier txt comme un csv avec des tabulations comme séparateur (avec read.table également)

            l'autre problématique que tu as (apparemment, si le tableau excel en capture correspond aux données)  c'est d'associer pour certaines colonnes une valeur avec un mot (ou ensemble de mots

            • Partager sur Facebook
            • Partager sur Twitter
              16 mai 2022 à 17:00:51

              Benzouye a écrit:

              Une chose est sûre c'est qu'il s'agit d'un format texte à largeur fixe (FWF).

              Je pense qu'avec readr_fwf tu devrais t'en sortir ...

              Exemple ici : Lire un fichier texte à largeur fixe dans R – Acervo Lima

              Et la doc : Read a fixed width file into a tibble — read_fwf • readr (tidyverse.org)

              -
              Edité par Benzouye il y a 22 minutes


              il me semble que c'est le bon chemin vers la solution, parce que pour la première fois j'arrive à créer les 19  variables et les associer aux données de fichier txt , mais le problème c'est que ça se remplit pas comme il faut il y'a plein de valeurs manquantes

              j'ai tout essayé avec read.table malheureusement ça marche pas

              -
              Edité par WatneyMarc 16 mai 2022 à 17:02:53

              • Partager sur Facebook
              • Partager sur Twitter
                16 mai 2022 à 17:09:48

                Peux-tu poster ton code R ? Surtout la ligne d'appel à readr_fwf avec ses paramètres.

                Dans l'exemple donné ci-dessus on voit 19 valeurs décimales par ligne avec un retour chariot. Vérifies que toutes tes lignes du fichier texte font la même longueur, note cette longueur, et note la position de chaque colonnes, genre : 1, 9, 17, 25, 33, 41, etc.

                C'est cette suite de positions qu'il faudra passer à la fonction readr_fwf pour qu'il sache où découper la chaîne de chaque ligne.

                -
                Edité par Benzouye 16 mai 2022 à 17:14:32

                • Partager sur Facebook
                • Partager sur Twitter
                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                  16 mai 2022 à 18:58:45

                  Benzouye a écrit:

                  Peux-tu poster ton code R ? Surtout la ligne d'appel à readr_fwf avec ses paramètres.

                  Dans l'exemple donné ci-dessus on voit 19 valeurs décimales par ligne avec un retour chariot. Vérifies que toutes tes lignes du fichier texte font la même longueur, note cette longueur, et note la position de chaque colonnes, genre : 1, 9, 17, 25, 33, 41, etc.

                  C'est cette suite de positions qu'il faudra passer à la fonction readr_fwf pour qu'il sache où découper la chaîne de chaque ligne.

                  -
                  Edité par Benzouye il y a environ 1 heure

                  Je m'excuse j'ai mis un peu de temps à répondre j'essayais ce que vous m'avez dit, j'obtiens toujours des valeurs NA manquantes voici le code :

                  -
                  Edité par WatneyMarc 16 mai 2022 à 19:07:08

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 mai 2022 à 0:01:14

                    Peux-tu poster ou partager les premières lignes de ton fichier ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                      17 mai 2022 à 8:40:50

                      Benzouye a écrit:

                      Peux-tu poster ou partager les premières lignes de ton fichier ?


                      Oui bien sur, voici les premières lignes de mon fichier :

                             1.0     6.0    19.5     7.0    53.6    88.0 

                             6.0    18.0   135.0     4.0    61.8   123.0 

                             1.0    26.0     4.0    71.8   196.0    42.0 

                           112.0

                             1.0     2.0    19.0     5.4    49.0    51.0 

                             1.0    18.0    99.0     5.0    64.8   107.0 

                             2.0    22.0     4.0    70.0   145.0    37.0 

                           140.0

                             1.0     3.0    20.3     7.3    51.3    58.0 

                             2.0    20.0   121.0     2.0    62.0   132.0 

                             1.0    21.0     5.0    71.0   165.0    54.0 

                           114.0

                             1.0     9.0    18.5     7.5    50.5    60.0 

                             6.0    20.0   140.0     4.0    65.4   144.0 

                             5.0    20.0     4.0    71.0   190.0    86.0 

                           180.0

                             1.0     5.0    20.0     6.3    52.4    66.0 

                             6.0    20.0   102.0     2.0    64.0   120.0 

                             1.0    21.0     4.0    70.5   150.0    89.0 

                           150.0

                             1.0     5.0    20.0     6.4    54.0    74.0 

                             6.0    20.0   102.0     4.0    63.8   121.0 

                             2.0    22.0     2.0    66.0   151.0    96.0 

                           126.0

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 mai 2022 à 13:26:42

                        Les colonnes ont l'air de toutes faire 8 caractères "de large".

                        Dans ton code tu donnes 3, 4 ou 5 ... Soit tu n'as pas posté le bon fichier txt, soit tu t'es gouré dans le colonnage ...

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                          17 mai 2022 à 13:47:44

                          autre question: on est d'accord que les lignes s'arrêtent après le 19ème chiffre, et donc que si tu ouvres en grand le bloc notes, on trouve une ligne complète

                                 1.0     6.0    19.5     7.0    53.6    88.0        6.0    18.0   135.0     4.0    61.8   123.0    1.0    26.0     4.0    71.8   196.0    42.0     112.0
                                 1.0     2.0    19.0     5.4    49.0    51.0        1.0    18.0    99.0     5.0    64.8   107.0        2.0    22.0     4.0    70.0   145.0    37.0      140.0
                                 1.0     3.0    20.3     7.3    51.3    58.0        2.0    20.0   121.0     2.0    62.0   132.0        1.0    21.0     5.0    71.0   165.0    54.0      114.0
                                 1.0     9.0    18.5     7.5    50.5    60.0        6.0    20.0   140.0     4.0    65.4   144.0        5.0    20.0     4.0    71.0   190.0    86.0      180.0
                                 1.0     5.0    20.0     6.3    52.4    66.0        6.0    20.0   102.0     2.0    64.0   120.0        1.0    21.0     4.0    70.5   150.0    89.0      150.0
                                 1.0     5.0    20.0     6.4    54.0    74.0        6.0    20.0   102.0     4.0    63.8   121.0        2.0    22.0     2.0    66.0   151.0    96.0      126.0


                          ou il y bien un saut de ligne tous les 6 chiffres (+ après le 19ème) ?

                          le width prend en compte les espaces entre les champs il me semble.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 mai 2022 à 14:00:39

                            umfred a écrit:

                            autre question: on est d'accord que les lignes s'arrêtent après le 19ème chiffre, et donc que si tu ouvres en grand le bloc notes, on trouve une ligne complète

                                   1.0     6.0    19.5     7.0    53.6    88.0        6.0    18.0   135.0     4.0    61.8   123.0    1.0    26.0     4.0    71.8   196.0    42.0     112.0
                                   1.0     2.0    19.0     5.4    49.0    51.0        1.0    18.0    99.0     5.0    64.8   107.0        2.0    22.0     4.0    70.0   145.0    37.0      140.0
                                   1.0     3.0    20.3     7.3    51.3    58.0        2.0    20.0   121.0     2.0    62.0   132.0        1.0    21.0     5.0    71.0   165.0    54.0      114.0
                                   1.0     9.0    18.5     7.5    50.5    60.0        6.0    20.0   140.0     4.0    65.4   144.0        5.0    20.0     4.0    71.0   190.0    86.0      180.0
                                   1.0     5.0    20.0     6.3    52.4    66.0        6.0    20.0   102.0     2.0    64.0   120.0        1.0    21.0     4.0    70.5   150.0    89.0      150.0
                                   1.0     5.0    20.0     6.4    54.0    74.0        6.0    20.0   102.0     4.0    63.8   121.0        2.0    22.0     2.0    66.0   151.0    96.0      126.0


                            ou il y bien un saut de ligne tous les 6 chiffres (+ après le 19ème) ?

                            le width prend en compte les espaces entre les champs il me semble.


                            Je vous remercie pour votre retour, il y a bien un saut de ligne tous les 6 chiffres, quand j'ouvre le fichier txt en grand ça donne ça : 

                            Benzouye je me suis surement gouré dans le colonage :( 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              17 mai 2022 à 14:38:21

                              le problème, je pense, c'est que tes données d'une ligne sont sur plusieurs lignes dans le fichier, il faut donc retraiter le fichier avant pour avoir une ligne dans le fichier = une ligne de données.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                17 mai 2022 à 14:44:41

                                umfred a écrit:

                                le problème, je pense, c'est que tes données d'une ligne sont sur plusieurs lignes dans le fichier, il faut donc retraiter le fichier avant pour avoir une ligne dans le fichier = une ligne de données.


                                voilà c'est exactement ça le problème, il faut étaler 3 lignes pour obtenir une seule ligne de 19 chiffres pour mes 19 variables je ne sais pas comment faire
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 mai 2022 à 16:17:33

                                  umfred a écrit:

                                  tes données d'une ligne sont sur plusieurs lignes dans le fichier

                                  Bien vu, je n'avais pas fait gaffe ...

                                  WatneyMarc a écrit:

                                  il faut étaler 3 lignes pour obtenir une seule ligne de 19 chiffres pour mes 19 variables

                                  Dans un éditeur de texte évolué (type Notepad++), il faut passer par une expression régulière.

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                    17 mai 2022 à 16:21:52

                                    Benzouye a écrit:

                                    umfred a écrit:

                                    tes données d'une ligne sont sur plusieurs lignes dans le fichier

                                    Bien vu, je n'avais pas fait gaffe ...

                                    WatneyMarc a écrit:

                                    il faut étaler 3 lignes pour obtenir une seule ligne de 19 chiffres pour mes 19 variables

                                    Dans un éditeur de texte évolué (type Notepad++), il faut passer par une expression régulière.

                                    je vous remercie pour votre retour. On ne peut pas le faire que sur R sans devoir passer par un éditeur de texte ? parce que c'est un projet 100% R 



                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      17 mai 2022 à 17:24:04

                                      ou c'est l'application qui fournit ce fichier qu'il faut retravailler si c'est possible (après, il "suffit" de lire le fichier via un readLines ou scan ( https://stt4230.rbind.io/manipulation_donnees/lecture_ecriture_r/#fichier-texte ) et reformer les lignes ensuite )
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        17 mai 2022 à 17:29:40

                                        Il faut simplement passer le contenu de statlab.txt dans une regexp, par exemple avec la fonction gsub() et la regexp présentée plus haut.

                                        fichier <- 'statlab.txt'
                                        contenu <- readChar(fichier, file.info(fichier)$size)
                                        donnees <- gsub( '([0-9\\. ]{50}) \r\n', '\\1', contenu )

                                        -
                                        Edité par Benzouye 17 mai 2022 à 18:27:08

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                          17 mai 2022 à 21:13:15

                                          Je vous remercie pour vos retours, malheureusement je n'arrive toujours pas à importer ce fichier comme il faut, je commence à perdre espoir il me semble qu'il n'y a pas de solution pour le lire comme je vous ai expliqué !
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            17 mai 2022 à 22:05:32

                                            Avec les trois ou quatre lignes postées et le code ci-dessus j'obtiens le résultat souhaité.

                                            Il n'y a plus qu'à le lire dans un dataTable.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                              17 mai 2022 à 22:56:40

                                              Benzouye a écrit:

                                              Avec les trois ou quatre lignes postées et le code ci-dessus j'obtiens le résultat souhaité.

                                              Il n'y a plus qu'à le lire dans un dataTable.



                                              j’ai essayé votre code mais j’obtiens beaucoup de fonn manquantes NA !

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                18 mai 2022 à 0:48:46

                                                Un exemple de ligne qui ne passe pas ?

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                                  18 mai 2022 à 11:07:43

                                                  il faut peut-être ne mettre que \n au lieu de \r\n dans l'expression (ça dépend si le fichier est en format Unix (LF=\n) ou Windows (CR LF=\r\n) ou Mac (CR=\r)) (on doit pouvoir le faire de façon automatique dans l'expression je crois)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    18 mai 2022 à 13:53:18

                                                    je vous remercie infiniment pour vos retours, pour que je dise pas de bêtises, s'il vous plait pouvez vous poster la ligne du code R qui doit venir jute après les 3 lignes que vous m'avez donné : 
                                                    1
                                                    2
                                                    3
                                                    fichier <- 'statlab.txt'
                                                    contenu <- readChar(fichier, file.info(fichier)$size)
                                                    donnees <- gsub( '([0-9\\. ]{50}) \r\n', '\\1', contenu )

                                                    Merci d'avance

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      18 mai 2022 à 14:19:21

                                                      tu peux enregistrer donnees dans un fichier pour le lire en suite comme tu faisais avant avec read.fwf (avec les bonnes valeurs de largeurs) ou avec read.table([nom du fichier], col.names=c(...))

                                                      write(donnees, "temp.txt")



                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        18 mai 2022 à 14:25:24

                                                        Je viens d'essayer ça crée le fichier temp.txt, mais c'est le même que mon fichier de base !

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          18 mai 2022 à 15:30:05

                                                          Peux-tu partager un lien de téléchargement contenant quelques lignes de ton fichier source, si possible celles qui posent problèmes de N/A ?

                                                          Personnellement avec un copier/coller de l'exemple donné au début, et mon code, le résultat est conforme ... juste le write (comme proposé par umfred) et read.fwf (comme vu plus tôt) à rajouter pour avoir la sortie attendue ...

                                                          fichier <- 'statlab.txt'
                                                          contenu <- readChar(fichier, file.info(fichier)$size)
                                                          donnees <- gsub( '([0-9\\. ]{50}) \r\n', '\\1', contenu )
                                                          write( donnees, 'temp.txt' )
                                                          read.fwf( 'temp.txt', width=c(10,8,8,8,8,8,11,8,8,8,8,8,11,8,8,8,8,8,11), header='F', col.names=c(...) )

                                                          Juste à remplacer les bons noms de colonnes ...

                                                          -
                                                          Edité par Benzouye 18 mai 2022 à 15:50:03

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                                                            18 mai 2022 à 15:35:18

                                                            Voilà un lien de téléchargement contenant le fichier source : https://www.transfernow.net/dl/20220518MtvdYhIG

                                                            merci beaucoup

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              18 mai 2022 à 16:22:38

                                                              Le problème vient du retour chariot ... Avec le copier/coller sur le forum (\r\n) qui est différent de celui de ton fichier (\n) ...

                                                              fichier <- 'statlab.txt'
                                                              contenu <- readChar(fichier, file.info(fichier)$size)
                                                              donnees <- gsub( '([0-9\\. ]{50}) \n', '\\1', contenu )
                                                              write( donnees, 'temp.txt' )
                                                              colonnes <- c('1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19')
                                                              read.fwf( 'temp.txt', width=c(10,8,8,8,8,8,11,8,8,8,8,8,11,8,8,8,8,8,11), header=F, col.names=colonnes )

                                                              Avec ça tu es bon !

                                                              -
                                                              Edité par Benzouye 18 mai 2022 à 16:24:38

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

                                                              Aide svp : importation fichier txt sous R

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown