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 :

Erreur avec read.table : "la ligne x n'avait pas p éléments"


Sujet :

R

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Erreur avec read.table : "la ligne x n'avait pas p éléments"
    Bonjour,

    Je suis statisticien et utilisateur averti de R. Je sais utiliser read.table, et en particulier, je sais me servir de sep=",". J'ai un problème avec read.table que je serais enchanté de résoudre! Si quelqu'un peut aider...

    J'ai un (gros) fichier table.csv qui possède 176 variables et 48 036 lignes, plus 1 ligne pour les noms de variables. Voici les 3 premières lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ID,VERIF,SURVEYCOMPLETEDDATE,QDESIGN,RESP_GENDER,RESP_AGE,QAGE,Q1,Q1REC,Q3,Q3BIS,Q4_1,Q5_1,Q5_2,Q5_3,Q7,Q8,Q9,Q10,Q11BIS,Q12,Q13,Q13EX_99,Q13BIS,Q14,Q15BIS_1,Q15BISEX_99,Q15TER,Q151_1,Q151EX_99,Q152,Q153_1,Q153EX_99,Q154,Q16_1,Q16EX_1,Q16BIS_1,Q16BISEX_3,Q16BISEX_2,Q171_1,Q171EX_3,Q171EX_2,Q172_1,Q172EX_4,Q172EX_2,Q172EX_3,QTRADEOFF_1,QTRADEOFF_2,QTRADEOFF_3,QTRADEOFF_4,Q18,Q19,Q20,Q22,Q23,Q24,Q25,Q26,Q27_1,Q27_2,Q27_3,Q27_4,Q27_5,Q27_6,Q28_1,Q28_2,Q29,Q30,Q31,Q32_1,Q32_3,Q32_2,Q32_4,Q33,Q34,Q6,Q16EX_2,Q16BISEX_4,Q17BIS_1,Q17BIS_2,Q17BIS_3,Q17BIS_4,Q17BIS_5,Q17BIS_6,Q17BIS_7,Q17BIS_8,Q17BIS_9,Q17BIS_10,Q21B_1,Q21B_2,Q21B_3,Q21B_4,Q21B_5,Q21B_6,Q21B_7,Q21B_8,Q21B_9,HCAL_REGION3_5CODES,HCAL_STDHOUSEHOLDSIZE,Z_CM_HOH_INSEE_OCCUPATION_5BREAK,Z_CM_MKTSIZE_5CODES,ICAL_INDHOH,HOH_AGE,HOH_SEX,q11,qtownLabel,q23_6_other,q33_6_other,q34_6_other,q21b_9_other,resp,respagence,numlog,nummerge,Agence,logement,_surface,_distance_emploi__Reference,_dist__emploi_voiture,_dist_emploi_trspt_commun,dist_centre,dist_centre_voiture,_dist_centre_commun,dans_le_quartier,source,_isolation,prix__cart,Agence1,maison,surfini,surface,distempref,distempvoi,distemptco,distcentref,distcentvoi,distcenttco,electricite,fuel,gaz,isolplus,isolmoins,commerce,ecole,prix,prixlog,choix,poids,identgroupe,discenttco,agerep,agepr,hommerep,hommepr,revenus,uc,nivvie,dip1,dip2,dip3,dip4,dip5,dip6,pondmen,pondind,habmaison,habcommerce,habecole,habisolplus,habisolmoins,habenfant,habelec,habfioul,habgaz,habautre,quartnvie
    14402638,1,2 Nov 2010 20:17:18,1,2,41,4,1,1,1,,2,0,2,1,1,5,5,14,,2,40,0,,2,,,,500,0,,,,,60,0,40,0,,10,0,0,20,0,0,0,3,1,2,3,3,5,1,2,1,1,2,1,2,9,9,9,9,9,1,0,1,1,1,1,1,2,2,1,1,1,0,0,3,3,1,1,2,1,1,1,1,2,1,0,1,1,1,0,0,0,0,1,2,3,1,1,41,2,77700,Paris,,,,,1,11,1,111,1,1,9,6,6,7,11,5,2,3,1,3,7,1,0,40,48,35,42,45.5,60,66,48,0,0,1,1,0,1,0,500,650,0,0.0833333333,144026381,,41,41,0,0,999999,1.5,999999,0,0,0,0,1,0,1,2,0,1,1,1,0,0,1,0,0,0,9
    14402638,1,2 Nov 2010 20:17:18,1,2,41,4,1,1,1,,2,0,2,1,1,5,5,14,,2,40,0,,2,,,,500,0,,,,,60,0,40,0,,10,0,0,20,0,0,0,3,1,2,3,3,5,1,2,1,1,2,1,2,9,9,9,9,9,1,0,1,1,1,1,1,2,2,1,1,1,0,0,3,3,1,1,2,1,1,1,1,2,1,0,1,1,1,0,0,0,0,1,2,3,1,1,41,2,77700,Paris,,,,,1,11,2,112,1,1,9,11,4,2,3,4,5,2,3,2,2,1,0,40,48,60,60,48,20,20,22,1,0,0,0,1,0,1,500,400,0,0.0833333333,144026381,,41,41,0,0,999999,1.5,999999,0,0,0,0,1,0,1,2,0,1,1,1,0,0,1,0,0,0,9
    Read.table me fait l'erreur classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    > data<-read.table("table.csv",sep=",",header=TRUE)
    Erreur dans scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
    la ligne 34159 n'avait pas 176 éléments
    Pourtant la ligne contient bien le même nombre de colonnes, aucun caractère particulier, pas plus pas moins de données manquantes que la ligne d'avant... L'extrait du fichier .csv, +/- 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    16260990,1,1 Nov 2010 17:43:28,2704,2,22,2,1,1,2,2,1,0,0,0,9,,6,1,,2,95,0,,4,600,0,,,,,,,,80,0,30,0,,,0,1,,0,1,0,2,3,2,1,3,3,2,2,1,2,2,1,5,9,9,9,9,9,1,0,1,1,1,1,1,1,1,7,2,1,0,0,4,3,,,3,2,2,3,4,1,0,1,1,0,1,1,0,0,0,1,1,5,5,1,22,2,92340,Paris,,,,,2704,27042,2,270422,2,1,2,4,3,1,2,5,3,3,3,3,6,2,0,95,80.75,25,30,30,15,16.5,13.5,1,0,0,1,0,1,0,600,720,0,0.0833333333,162609902,,22,22,0,0,6000,0.8,7500,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1
    16260990,1,1 Nov 2010 17:43:28,2704,2,22,2,1,1,2,2,1,0,0,0,9,,6,1,,2,95,0,,4,600,0,,,,,,,,80,0,30,0,,,0,1,,0,1,0,2,3,2,1,3,3,2,2,1,2,2,1,5,9,9,9,9,9,1,0,1,1,1,1,1,1,1,7,2,1,0,0,4,3,,,3,2,2,3,4,1,0,1,1,0,1,1,0,0,0,1,1,5,5,1,22,2,92340,Paris,,,,,2704,27042,3,270423,2,2,6,4,3,1,7,7,1,2,1,1,5,2,1,95,99.75,25,30,30,40,52,28,0,0,1,0,0,0,1,600,660,1,0.0833333333,162609902,,22,22,0,0,6000,0.8,7500,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1
    16260990,1,1 Nov 2010 17:43:28,2704,2,22,2,1,1,2,2,1,0,0,0,9,,6,1,,2,95,0,,4,600,0,,,,,,,,80,0,30,0,,,0,1,,0,1,0,2,3,2,1,3,3,2,2,1,2,2,1,5,9,9,9,9,9,1,0,1,1,1,1,1,1,1,7,2,1,0,0,4,3,,,3,2,2,3,4,1,0,1,1,0,1,1,0,0,0,1,1,5,5,1,22,2,92340,Paris,,,,,2704,27043,1,270431,3,2,7,5,1,3,7,7,1,2,2,1,3,3,1,95,104.5,30,30,30,40,52,28,0,1,0,0,0,0,1,600,540,0,0.0833333333,162609903,,22,22,0,0,6000,0.8,7500,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1
    16260990,1,1 Nov 2010 17:43:28,2704,2,22,2,1,1,2,2,1,0,0,0,9,,6,1,,2,95,0,,4,600,0,,,,,,,,80,0,30,0,,,0,1,,0,1,0,2,3,2,1,3,3,2,2,1,2,2,1,5,9,9,9,9,9,1,0,1,1,1,1,1,1,1,7,2,1,0,0,4,3,,,3,2,2,3,4,1,0,1,1,0,1,1,0,0,0,1,1,5,5,1,22,2,92340,Paris,,,,,2704,27043,2,270432,3,1,5,3,7,6,7,7,1,4,1,3,4,3,0,95,95,20,30,30,40,52,28,0,0,1,1,0,1,1,600,600,1,0.0833333333,162609903,,22,22,0,0,6000,0.8,7500,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1
    16260990,1,1 Nov 2010 17:43:28,2704,2,22,2,1,1,2,2,1,0,0,0,9,,6,1,,2,95,0,,4,600,0,,,,,,,,80,0,30,0,,,0,1,,0,1,0,2,3,2,1,3,3,2,2,1,2,2,1,5,9,9,9,9,9,1,0,1,1,1,1,1,1,1,7,2,1,0,0,4,3,,,3,2,2,3,4,1,0,1,1,0,1,1,0,0,0,1,1,5,5,1,22,2,92340,Paris,,,,,2704,27043,3,270433,3,2,3,6,5,5,7,7,1,1,3,2,7,3,1,95,85.5,35,30,30,40,52,28,1,0,0,0,1,0,0,600,780,0,0.0833333333,162609903,,22,22,0,0,6000,0.8,7500,0,0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1
    Je ne me laisse pas abattre, je m'arrête à la 34 159è ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    data<-read.table("table.csv",sep=",",header=TRUE,nrows=34158)
    puis j'enlève manuellement les 34 158 premières lignes du fichier table.csv (en laissant les noms de variable), et je sauvegarde en table2.csv. Et je recommence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    > data2<-read.table("table2.csv",sep=",",header=TRUE)
    Erreur dans scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
      la ligne 260 n'avait pas 176 éléments
    > data2<-read.table("table2.csv",sep=",",header=TRUE,nrows=259)
    Le truc à m'expliquer c'est ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    > dim(data)
    [1] 34158   176
    > dim(data2)
    [1] 259 176
    Et pourquoi rbind fonctionne sans erreur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    > temp<-rbind(data,data2)
    Bien sûr, je pourrais faire à la main et fusionner les tables data, data2, data3... data543 par rbind à la fin, mais déjà ça prend du temps, ensuite c'est frustrant, et de toute façon je fais un export depuis SAS avec des données risquant d'être réactualisées et donc, si ça pouvait être straight forward, ça m'arrangerait.

    Merci de votre aide!

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour et bienvenu sur le forum

    Ajoute simplement fill=TRUE pour corriger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data<-read.table("table.csv",sep=",",header=TRUE, fille=TRUE)
    fill logical. If TRUE then in case the rows have unequal length, blank fields are implicitly added. See ‘Details’.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur d'études / Biostatisticien
    Inscrit en
    Décembre 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études / Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2009
    Messages : 354
    Points : 194
    Points
    194
    Par défaut
    En fait tu as du importer tes données d'une table excel mal édité à un format texte je pari.

    Il te faut ouvrir ta table sous txt et supprimer les lignes vides qui se sont insérées en dessous de tes données.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    fill=TRUE marche impeccable

    (même si le problème de fond reste irrésolu, ce dont je me moque un peu : non, il n'y pas de lignes vides dans mon fichier .csv - que j'ai en revanche bien produit à partir d'EXCEL)

    Merci à tous les deux

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

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Le problème de fond est partiellement résolu lui aussi : q11 = code postal, qtownlabel = ville, les variables other étant des questions libres dans des choix multiples. Ici : q21b_9_other = "Pourquoi êtes-vous attaché à votre logement?"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            q11                                   qtownLabel q23_6_other q33_6_other q34_6_other q21b_9_other resp respagence numlog nummerge Agence
    34157 67500                                     Haguenau                                                  2726      27264      2   272642      4
    34158 67500                                     Haguenau                                                  2726      27264      3   272643      4
    34159 61300 LAigle,,,,outil de travail (chambres dhôtes)        2727       27271           1       272711    1          1      8        1      1
    34160 61300 LAigle,,,,outil de travail (chambres dhôtes)        2727       27271           2       272712    1          1      8       10      4
    4 virgules dont "prises en otages" dans un texte, va savoir pourquoi...

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

    Informations forums :
    Inscription : Février 2011
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Le mot de la fin :

    De honteuses apostrophes sont coupables!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    61300,L'Aigle,,,,outil de travail (chambres d'hôtes),
    En modifiant ainsi, read.table ne fait plus d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    61300,LAigle,,,,outil de travail (chambres dhôtes),

  7. #7
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 38
    Points
    38
    Par défaut
    Je sais, 2 ans plus tard c'est long mais la question est récurrente.

    L'argument quote de la fonction read.table permet de résoudre ce problème. Dans l'aide de la fonction read.table on lit :

    quote: the set of quoting characters. To disable quoting altogether,
    use ‘quote = ""’. See ‘scan’ for the behaviour on quotes
    embedded in quotes. Quoting is only considered for columns
    read as character, which is all of them unless ‘colClasses’
    is specified.
    Comme vous le voyez : R propose directement la solution quote ="" pour que le caractère ' ne soit pas considéré comme un guillemet signalant une citation.

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 1
    Points : 1
    Points
    1
    Par défaut R
    Bonjour,

    j'essaie d'importer un gros fichier sous format text sous R,
    j'utilise le code suivant :
    Base_FD_2014 <- read.table("D:\users\frichard\Downloads\MOD_LOGEMT_2014.txt", header=TRUE, stringsAsFactors=TRUE,
    sep=";", na.strings="NA", dec=",", strip.white=TRUE)

    il y a ce message d'erreur : [19] ERREUR:
    bidi formatting not allowed (line 1), use escapes instead (\u202a)
    [20] ERREUR: '\u' non suivi de chiffres hexadécimaux dans la chaîne de caractères débutant ""D

    j'aimerais savoir si vous pouvez m'aidez svp?

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

Discussions similaires

  1. Erreur avec read.table()
    Par Fort en pommes dans le forum R
    Réponses: 7
    Dernier message: 04/03/2014, 14h22
  2. Réponses: 2
    Dernier message: 24/02/2012, 10h54
  3. [MySQL] Erreur avec une Table Temporaire
    Par Stageuse44 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/05/2011, 14h42
  4. Problème avec read.table()
    Par skystef dans le forum R
    Réponses: 7
    Dernier message: 19/02/2010, 09h56
  5. Erreur avec la sérialisation uniquement en ligne
    Par erehcab dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2008, 23h27

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