web-dev-qa-db-fra.com

Avertissement "Ligne finale incomplète" lors de la tentative de lecture d'un fichier .csv dans R

J'essaie de lire un fichier .csv dans R et d'utiliser cette formule:

pheasant<-read.table(file.choose(),header=TRUE,sep=",")

Je reçois ce message d'avertissement:

"incomplete final line found by readTableHeader on 'C:\Documents and Settings..."

Je pense que plusieurs choses peuvent être à l'origine de cet avertissement, mais malheureusement, je ne connais pas suffisamment R pour pouvoir diagnostiquer moi-même le problème. J'ai donc pensé poster ici dans l'espoir que quelqu'un d'autre puisse le diagnostiquer à ma place! 

  • le fichier .csv était à l'origine un fichier Excel, que j'ai enregistré au format .csv
  • le fichier comprend trois colonnes de données
  • chaque colonne de données a une longueur différente, c'est-à-dire qu'il y a un nombre différent de valeurs dans chaque colonne
  • Je veux comparer les moyennes (en utilisant t-test ou équivalent en fonction de la distribution normale/non normale) de deux colonnes à la fois, par exemple, t-test entre les valeurs de la colonne 1 et les valeurs de la colonne 2, puis un t- test des valeurs des colonnes 1 et 3, etc.

Toute aide ou suggestion serait sérieusement appréciée! 

96
Kate

Le message indique que la dernière ligne du fichier ne se termine pas par un caractère de fin de ligne (saut de ligne (\n) ou retour chariot + saut de ligne (\r\n)). L'intention initiale de ce message était de vous avertir que le fichier peut être incomplet; la plupart des fichiers de données ont un caractère EOL comme tout dernier caractère du fichier.

Le remède est simple:

  1. Ouvrir le fichier
  2. Naviguez jusqu'à la dernière ligne du fichier
  3. Placez le curseur à la fin de cette ligne
  4. Presse return
  5. Sauvegarder le fichier
122
Hendrik Pon

Êtes-vous vraiment sûr d'avoir sélectionné le fichier .csv et non le fichier .xls? Je ne peux reproduire l'erreur que si j'essaie de lire dans un fichier .xls. Si j'essaie de lire un fichier .csv ou tout autre fichier texte, il est impossible de recréer l'erreur que vous obtenez.

> Data <- read.table("test.csv",header=T,sep=",")
> Data <- read.table("test.xlsx",header=T,sep=",")
Warning message:
In read.table("test.xlsx", header = T, sep = ",") :
  incomplete final line found by readTableHeader on 'test.xlsx'

readTableHead est la fonction c qui donne l'erreur. Il essaie de lire les n premières lignes (les 5 premières en standard) pour déterminer le type des données. Le reste des données est lu en utilisant scan(). Le problème est donc le format du fichier.

Une façon de le savoir consiste à définir le répertoire de travail dans le répertoire où se trouve le fichier. De cette façon, vous voyez l’extension du fichier dans lequel vous avez lu. Je sais que, sous Windows, il n’est pas présenté en standard, vous pouvez donc croire qu’il s’agit d’un fichier csv. 

La prochaine chose à faire est d’ouvrir le fichier dans Notepad ou Wordpad (ou un autre éditeur) et de vérifier que le format correspond à mon fichier test.csv:

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,

Ce fichier vous donnera le dataframe suivant:

> read.table(testfile,header=T,sep=",")
  Test1 Test2 Test3
1     1     1     1
2     2     2     2
3     3     3     3
4     4     4    NA
5     5     5    NA
6    NA     6    NA

Le format CSV enregistré par Excel sépare toutes les cellules d’une virgule. Les cellules vides n'ont tout simplement pas de valeur. read.table() peut facilement gérer cela et reconnaît parfaitement les cellules vides.

14
Joris Meys

Utilisez readLines() (avec warn = FALSE) pour lire le fichier dans un vecteur de caractères en premier. 

Après cela, utilisez l’option text = pour lire le vecteur dans un cadre de données avec read.table()

    pheasant <- read.table( 
        text = readLines(file.choose(), warn = FALSE), 
        header = TRUE,  
        sep = "," 
    )
6
Damian

Je me suis rendu compte que plusieurs réponses ont été fournies mais aucune solution réelle n'a encore été trouvée.

Comme indiqué ci-dessus, la raison est l'absence de "fin de ligne" à la fin du fichier CSV. 

Alors que le vrai correctif devrait venir de Microsoft, la solution consiste à ouvrir le fichier CSV avec un éditeur de texte et à ajouter une ligne à la fin du fichier (appuyez sur la touche Retour). J'utilise le logiciel ATOM comme éditeur de texte/code, mais pratiquement tout éditeur de texte de base ferait l'affaire.

En attendant, veuillez signaler le bogue à Microsoft.

Question: Il me semble que c'est un problème de bureau 2016. Quelqu'un at-il le problème sur un PC?

3
Nicolas Stifani

J'ai reçu le même message. Mon correctif inclus: j'ai supprimé toutes les feuilles supplémentaires (onglets) du fichier .csv, éliminé les caractères non numériques, réenregistré le fichier comme délimité par des virgules et chargé dans R v 2.15.0 en utilisant le langage standard:

nomfichier <-read.csv ("nomfichier", en-tête = VRAI)

Pour plus de sécurité, j'ai fermé le logiciel et rouvert avant de charger le fichier csv. 

2
erik

Dans diverses langues européennes, comme la virgule sert de point décimal, la fonction read.csv2 doit être utilisée à la place. 

2
yifan

J'ai résolu ce problème en modifiant le codage dans l'argument read.table de fileEncoding = "UTF-16" à fileEncoding = "UTF-8". 

1
Dejan Pljevljakusic

Pour résoudre ce problème via R lui-même, je viens d'utiliser read.xlsx(..) au lieu d'un read.csv(). Fonctionne comme un charme !! Vous n'avez même pas besoin de renommer. Renommer un xlsx en csv n'est pas une solution viable.

1
Digvijay Sawant

J'ai eu ce problème une fois quand j'avais un seul devis dans le cadre de l'en-tête. Lorsque je l'ai supprimé (c'est-à-dire que j'ai renommé l'en-tête de colonne correspondant de Jimmy's data à Jimmys data), la fonction n'a renvoyé aucun avertissement.

1
loukdelouk

Le problème que vous décrivez s'est produit pour moi lorsque j'ai renommé .xlsx en .csv.

Ce qui a résolu le problème pour moi était "Enregistrer sous" puis enregistrez-le à nouveau en tant que .csv

0
Jase

Mon travail consistait à ouvrir le fichier csv dans un éditeur de texte, à supprimer les virgules excessives de la dernière valeur, puis à enregistrer le fichier. Par exemple pour le fichier suivant

Test1,Test2,Test3
1,1,1
2,2,2
3,3,3
4,4,
5,5,
,6,,

Supprimez les virgules après 6, puis enregistrez le fichier.

0
Chase Wright

Ouvrez le fichier dans text wrangler ou notepad ++ et affichez le formatage, par exemple. dans le texte wrangler vous montrez invisibles. De cette façon, vous pouvez voir les nouveaux caractères de ligne ou de tabulation Souvent, Excel ajoutera toutes sortes d'onglets aux mauvais endroits et pas un dernier caractère de nouvelle ligne, mais vous devez afficher les symboles pour voir ceci.

0
prepagam

J'ai essayé différentes solutions, telles que l'utilisation d'un éditeur de texte pour insérer une nouvelle ligne et obtenir le caractère de fin de ligne comme recommandé dans la réponse ci-dessus. Aucun de ceux-ci n'a fonctionné, malheureusement.

La solution qui fonctionnait finalement} était pour moi très simple: j'ai copié-collé le contenu d'un fichier CSV dans un nouveau fichier CSV vierge, je l'ai enregistré et le problème a disparu.

0
Rens

J'ai rencontré un problème similaire mais il semble s'agir d'un avertissement générique et peut ne pas être lié au caractère de fin de ligne. Dans mon cas, cela donnait cette erreur car le fichier que j'utilisais contenait des caractères cyrilliques. Une fois que je les ai remplacés par des caractères latins, l'erreur a disparu.

0
Imer Muhović