Ich habe eine CSV-Datei (24,1 MB) , die ich nicht vollständig in meine R-Sitzung einlesen kann. Wenn ich die Datei in einem Tabellenkalkulationsprogramm öffne, werden 112.544 Zeilen angezeigt. Wenn ich es mit in R lese read.csv
, erhalte ich nur 56.952 Zeilen und diese Warnung:
cit <- read.csv("citations.CSV", row.names = NULL,
comment.char = "", header = TRUE,
stringsAsFactors = FALSE,
colClasses= "character", encoding= "utf-8")
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Ich kann die ganze Datei in R lesen mit readLines
:
rl <- readLines(file("citations.CSV", encoding = "utf-8"))
length(rl)
[1] 112545
Aber ich kann das nicht als Tabelle (über read.csv
) zurück in R bekommen :
write.table(rl, "rl.txt", quote = FALSE, row.names = FALSE)
rl_in <- read.csv("rl.txt", skip = 1, row.names = NULL)
Warning message:
In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings, :
EOF within quoted string
Wie kann ich diese EOF-Nachricht (die eher ein Fehler als eine Warnung zu sein scheint) lösen oder umgehen, um die gesamte Datei in meine R
Sitzung aufzunehmen?
Ich habe ähnliche Probleme mit anderen Methoden zum Lesen von CSV-Dateien:
require(sqldf)
cit_sql <- read.csv.sql("citations.CSV", sql = "select * from file")
require(data.table)
cit_dt <- fread("citations.CSV")
require(ff)
cit_ff <- read.csv.ffdf(file="citations.CSV")
Hier ist meine sessionInfo ()
R version 3.0.1 (2013-05-16)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] tools tcltk stats graphics grDevices utils datasets methods base
other attached packages:
[1] ff_2.2-11 bit_1.1-10 data.table_1.8.8 sqldf_0.4-6.4
[5] RSQLite.extfuns_0.0.1 RSQLite_0.11.4 chron_2.3-43 gsubfn_0.6-5
[9] proto_0.3-10 DBI_0.2-7
quelle
fread
in dieser Situation zu arbeiten? Ich bevorzuge das, weil es viel schneller ist alsread.csv
. Aberfread
scheint keinquote
Argument zu nehmen ..fread
mit eingebetteten Zitaten im Allgemeinen nicht gut, aber ich bin mir sicher, dass es bald eine Problemumgehung geben wird. stackoverflow.com/questions/16094025/…write.csv()
und bekam 403 mit zurückread.csv()
. Durch Hinzufügen von quote = "" habe ich bis zu 410 Zeilen erhalten.read.table()
macht es nicht besser. Ich frage mich, was noch versucht werden kann ...Ich bin ein neuer R-Benutzer und dachte, ich würde dies posten, falls es jemand anderem hilft. Ich habe versucht, Daten aus einer Textdatei (durch Kommas getrennt) einzulesen, die einige spanische Zeichen enthielt, und es hat ewig gedauert, bis ich es herausgefunden habe. Ich wusste, dass ich UTF-8-Codierung verwenden musste, das Header-Argument auf TRUE setzen musste und dass ich das sep-Argument auf "," setzen musste, aber dann bekam ich immer noch Probleme. Nachdem ich diesen Beitrag gelesen hatte, versuchte ich, das Füllargument auf TRUE zu setzen, bekam dann aber den gleichen "EOF in Anführungszeichen", den ich auf die gleiche Weise wie oben korrigieren konnte. Meine erfolgreiche read.table sieht folgendermaßen aus:
target <- read.table("target2.txt", fill=TRUE, header=TRUE, quote="", sep=",", encoding="UTF-8")
Das Ergebnis hat spanischsprachige Zeichen und die gleichen Abmessungen, die ich ursprünglich hatte, also nenne ich es einen Erfolg! Vielen Dank an alle!
quelle
In der R-Hilfe, wie oben erwähnt, deaktivieren Sie einfach das Zitieren insgesamt, indem Sie einfach Folgendes hinzufügen:
zu der read.csv () hat bei mir funktioniert.
Der Fehler "EOF in Zeichenfolge in Anführungszeichen" trat auf mit:
In der eingelesenen Datei fehlten 6.619 Zeilen. Aber durch Deaktivieren des Zitierens
Arbeitete fehlerfrei und alle Zeilen wurden erfolgreich eingelesen.
quelle
Ich bin auch auf dieses Problem gestoßen und konnte einen ähnlichen EOF-Fehler umgehen, indem ich:
Beachten Sie, dass der Trennzeichenparameter im allgemeineren definiert ist
read.table()
.quelle
Das
read.csv()
Lesen einer Datei mit Textinhalt ist eigentlich keine gute Idee. Deaktivieren Sie das Anführungszeichen, daquote=""
es nur eine vorübergehende Lösung darstellt und nur mit separaten Anführungszeichen funktioniert. Es gibt andere Gründe, die die Warnung verursachen könnten, z. B. einige Sonderzeichen.Die dauerhafte Lösung (unter Verwendung
read.csv()
), herauszufinden, was diese Sonderzeichen sind, und einen regulären Ausdruck zu verwenden, um sie zu beseitigen, ist eine Idee.Haben Sie jemals daran gedacht, das Paket zu installieren
{data.table}
undfread()
zum Lesen der Datei zu verwenden? es ist viel schneller und würde Sie mit dieser EOF-Warnung nicht stören. Beachten Sie, dass die geladene Datei als data.table-Objekt, jedoch nicht als data.frame-Objekt gespeichert wird. Die Klasse data.table hat viele gute Funktionen, aber Sie können sieas.data.frame()
bei Bedarf mithilfe von transformieren .quelle
Ich hatte das ähnliche Problem: EOF-Warnung und nur ein Teil der Daten wurde mit read.csv () geladen. Ich habe versucht, die Anführungszeichen = "", aber es hat nur die EOF-Warnung entfernt.
Als ich jedoch die erste Zeile betrachtete, die nicht geladen wurde, stellte ich fest, dass sich in einer der Zellen ein Sonderzeichen befand, ein Pfeil → (Hexadezimalwert 0x1A). Nachdem ich den Pfeil gelöscht hatte, wurden die Daten normal geladen.
quelle
Ich hatte auch das ähnliche Problem. In meinem Fall war die Ursache des Problems jedoch das Vorhandensein von Apostrophen (dh einfachen Anführungszeichen) in einigen Textwerten. Dies ist besonders häufig bei der Arbeit mit Daten, einschließlich Texten in Französisch, z. B. «L'autre jour».
So ist die Lösung einfach war die Standardeinstellung des Zitats Arguments anzupassen , um die auszuschließen «'» Symbol und somit unter Verwendung quote = ‚\‘ " (dh doppelte Anführungszeichen nur ), alles hat gut funktioniert.
Ich hoffe das kann einigen von euch helfen. Prost.
quelle
Das readr- Paket behebt dieses Problem.
quelle