r - Waarschuwing 'Onvolledige laatste regel' bij het lezen van een .csv-bestand in R
Ik probeer een .csv-bestand in R te lezen en bij gebruik van deze formule:
Ik krijg dit waarschuwingsbericht:
Er zijn een aantal dingen waarvan ik dacht dat ze deze waarschuwing hebben veroorzaakt, maar helaas weet ik niet genoeg over R om het probleem zelf te diagnosticeren, dus ik dacht ik post het hier in de hoop dat iemand anders het voor mij kan diagnosticeren !
het .csv-bestand was oorspronkelijk een Excel-bestand, dat ik opsloeg in .csv-formaat
het bestand bestaat uit drie kolommen met gegevens
elke gegevenskolom heeft een verschillende lengte, d.w.z. er is een ander aantal waarden in elke kolom
Ik wil de gemiddelden (met behulp van t-test of equivalent, afhankelijk van normale/niet-normale verdeling) van twee kolommen tegelijk vergelijken, dus bijvoorbeeld t-test tussen kolom 1-waarden en kolom 2-waarden, dan een t-test van kolom 1 en kolom 3 waarden, enz.
Alle hulp of suggesties worden zeer op prijs gesteld!
Het bericht geeft aan dat de laatste regel van het bestand niet eindigt met een End Of Line (EOL)-teken (linefeed (\n) of regelterugloop+linefeed (\r\n)). De oorspronkelijke bedoeling van dit bericht was om u te waarschuwen dat het bestand mogelijk onvolledig is; de meeste gegevensbestanden hebben een EOL-teken als het allerlaatste teken in het bestand.
De remedie is eenvoudig:
Navigeer naar de allerlaatste regel van het bestand
Plaats de cursor aan het einde van die regel
Het probleem is eenvoudig op te lossen;
het is omdat de laatste regel leeg MOET zijn.
Zeg, als uw inhoud
Vandaag kwam ik dit soort probleem tegen, toen ik R probeerde te gebruiken om een JSON-bestand te lezen, met behulp van de onderstaande opdracht:
; en ik los het op met mijn bovenstaande methode.
Weet je echt zeker dat je het .csv-bestand hebt geselecteerd en niet het .xls-bestand? Ik kan de fout alleen reproduceren als ik een .xls-bestand probeer in te lezen. Als ik een .csv-bestand of een ander tekstbestand probeer in te lezen, is het onmogelijk om de fout die je krijgt opnieuw te maken.
readTableHeadis de c-functie die de fout geeft. Het probeert de eerste n regels in te lezen (standaard de eerste 5 ) om het type gegevens te bepalen. De rest van de gegevens wordt ingelezen met behulp van scan(). Het probleem is dus het formaat van het bestand.
Een manier om daar achter te komen, is door de werkdirectory in te stellen op de directory waar het bestand zich bevindt. Op die manier zie je de extensie van het bestand dat je inleest. Ik weet dat het in Windows niet standaard wordt weergegeven, dus je zou kunnen denken dat het csv is terwijl het dat niet is.
Het volgende ding dat u moet doen, is het bestand open in Kladblok of WordPad (of een andere editor) en controleert of het formaat gelijk is aan mijn bestand test.csv:
Dit bestand geeft u het volgende dataframe:
Het CSV-formaat opgeslagen door Excel scheidt alle cellen met een komma. Lege cellen hebben gewoon geen waarde. read.table()kan hier eenvoudig mee omgaan en erkent lege cellen prima.
Gebruik readLines()(met warn = FALSE) om het bestand eerst in een tekenvector te lezen.
Gebruik daarna de optie text =om de vector in een gegevensframe te lezen met read.table()
Ik besefte dat verschillende antwoorden zijn verstrekt, maar nog geen echte oplossing.
De reden, zoals hierboven vermeld, is een "einde van de lijn" ontbreekt aan het einde van het CSV-bestand.
Terwijl de echte fix van Microsoft zou komen, is de wandeling rond om het CSV-bestand te openen met een teksteditor en een regel aan het einde van het bestand toe te voegen (AKA Pers Return-toets).
Ik gebruik ATOM-software als tekst / codeeditor, maar vrijwel alle basistekst-editor zou doen.
Meld ondertussen de bug aan Microsoft.
Vraag: het lijkt mij een Office 2016-probleem. Heeft iemand het probleem op een pc?
Ik heb hetzelfde bericht ontvangen. Mijn oplossing omvatte: ik heb alle extra bladen (tabbladen) in het .csv-bestand verwijderd, niet-numerieke tekens verwijderd, het bestand opnieuw opgeslagen als door komma's gescheiden en geladen in R v 2.15.0 met behulp van standaardtaal:
bestandsnaam<-read.csv("bestandsnaam",header=TRUE)
Als extra beveiliging heb ik de software gesloten en opnieuw geopend voordat ik de csv laadde.
In verschillende Europese landen dient de komma als decimaalteken en moet in plaats daarvan de functie read.csv2 worden gebruikt.
Ik heb dit probleem opgelost door de codering in het read.table-argument te wijzigen van fileEncoding = "UTF-16" in fileEncoding = "UTF-8".
Ik heb dit probleem een keer gehad toen ik een enkel aanhalingsteken had als onderdeel van de koptekst. Toen ik het verwijderde (d.w.z. de respectieve kolomkop hernoemd van Jimmy's datanaar Jimmys data), gaf de functie geen waarschuwingen terug.
Het probleem dat je beschrijft deed zich voor bij mij toen ik een .xlsxhernoemde naar .csv.
Wat het voor mij oploste, was "Opslaan als" gaan en het dan opnieuw opslaan als een .csv.
Om dit probleem via R zelf op te lossen, heb ik gewoon read.xlsx(..)gebruikt in plaats van een read.csv(). Werkt perfect!! Je hoeft niet eens te hernoemen. Een xlsx hernoemen naar csv is geen haalbare oplossing.
Open het bestand in text wrangler of notepad ++ en toon de opmaak, b.v. in text wrangler laat je onzichtbaren zien. Op die manier kunt u de tekens van de nieuwe regel of tabs zien
Excel voegt vaak allerlei tabbladen toe op de verkeerde plaatsen en niet een laatste teken van een nieuwe regel, maar je moet de symbolen laten zien om dit te zien.
Mijn probleem was dat ik het csv-bestand in een teksteditor opende, de overmatige komma's op de laatste waarde verwijderde en het bestand vervolgens opsloeg. Bijvoorbeeld voor het volgende bestand
Verwijder de komma's na 6 en sla het bestand op.
Ik heb een soortgelijk probleem ondervonden, maar dit lijkt op een algemene waarschuwing en heeft in feite niets te maken met het teken aan het einde van de regel. In mijn geval gaf het deze fout omdat het bestand dat ik gebruikte Cyrillische tekens bevatte. Toen ik ze eenmaal verving door Latijnse tekens, verdween de fout.
Ik heb verschillende oplossingen geprobeerd, zoals het gebruik van een teksteditor om een nieuwe regel in te voegen en het End Of Line-tekente krijgen, zoals aanbevolen in het bovenste antwoord hierboven. Geen van deze werkte helaas.
De oplossing die uiteindelijk werktevoor mij was heel eenvoudig: ik kopieerde de inhoud van een CSV-bestand naar een nieuw, leeg CSV-bestand, sloeg het op en het probleem was verdwenen.