Frage

Betrachten Sie die folgende durch Kommas getrennte Datei.Der Einfachheit halber soll es eine Zeile enthalten:


'I am quoted','so, can use comma inside - it is not separator here','but can\'t use escaped quote :=('

Wenn Sie versuchen, es mit dem Befehl zu lesen

table <- read.csv(filename, header=FALSE)

Die Zeile wird in 4 Teile geteilt, da die Zeile 3 Kommas enthält.Tatsächlich möchte ich nur drei Teile lesen, von denen einer selbst ein Komma enthält.Da kommt die Quote-Flagge zur Hilfe.Ich habe es versucht:

table <- read.csv(filename, header=FALSE, quote="'")

aber das ist ein Irrtum "incomplete final line found by readTableHeader on table".Dies geschieht aufgrund der ungeraden (sieben) Anzahl von Anführungszeichen.

read.table() sowie scan() Parameter haben allowEscapes, aber setzen Sie es auf TRUE hilft nicht.Es ist in Ordnung, denn von help(scan) du kannst lesen:

Die Flüchtlinge, die interpretiert werden, sind die Kontrollzeichen ' a, b, f, n, r, t, v', ......Jeder andere entkommene Charakter wird als sich selbst behandelt, einschließlich Backslash

Bitte schlagen Sie vor, wie Sie solche zitierten CSV-Dateien lesen würden, die Escapezeichen enthalten \' Zitate.

War es hilfreich?

Lösung

Eine Möglichkeit ist die Nutzung readLines() um alles so vorzulesen, wie es ist, und fahren Sie dann fort, indem Sie das Anführungszeichen durch etwas anderes ersetzen, z. B.:

tt <- readLines("F:/temp/test.txt")
tt <- gsub("([^\\]|^)'","\\1\"",tt) # replace ' by "
tt <- gsub("\\\\","\\",tt) # get rid of the double escape due to readLines

Dadurch können Sie den Vektor tt mit a einlesen textConnection

zz <- textConnection(tt)
read.csv(zz,header=F,quote="\"") # give text input
close(zz)

Nicht die schönste Lösung, aber sie funktioniert (vorausgesetzt, Sie haben natürlich nicht irgendwo in der Datei ein „Zeichen ...“)

Andere Tipps

read_delim aus dem Paket Leser kann mithilfe der Argumente mit maskierten Anführungszeichen umgehen escape_double Und escape_backslash.

read_delim(file, delim=',', escape_double=FALSE, escape_backslash=TRUE, quote="'")

(Beachten Sie, dass ältere Versionen von readr Zeilenumbrüche in CSV-Headern in Anführungszeichen nicht korrekt unterstützen: https://github.com/tidyverse/readr/issues/784)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top