2016-12-06 2 views
1

Ich habe eine große csv-Datensatz, der einen Schmerz erweist sich in R. importierenR 3.3.2 Fehler beim Importieren der CSV mit read.table - Wahrscheinliche zitierte Ausgabe

Unten ist ein Beispiel des Datensatzes, mit alle der relevat Fragen:

col 1,col 2,col 3,col 4 
txt 1,txt ' 2,"This is a big 

field with carriage returns, all enclosed in double 

quotes",txt 4 
txt1,txt2,txt3,txt4 

so wie Sie sehen können, gibt Probleme mit einfachen Anführungszeichen innerhalb von Feldern, doppelte Anführungszeichen umschließen große Blöcke von Texten sind die Kommas, und neue Zeilen in Felder (alle enthalten sollte in doppelte Anführungszeichen eingeschlossen). Felder enthalten jedoch keine Anführungszeichen, wenn sie keine Kommas und keine neuen Zeilen enthalten.

Ich habe

versucht
read.table(file, sep = ",", quote = '"', header = TRUE) 

Aber ich erhalte die Fehler

Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, : 
    line 31 did not have 95 elements 

nicht sicher, was genau das Problem ist, aber ich bin sicher, dass es um die bedingten doppelten Anführungszeichen Texterkennungszeichen in engen Zusammenhang steht, die neuen Zeilen oder beides.

Irgendwelche Ratschläge zum Anpassen des Codes oder wie ich Fehler beheben könnte? Schätze jede Hilfe!

Antwort

7

Mit fread aus dem data.table Paket, es funktioniert mit Standard-args fein:

DF = data.table::fread(data.table = FALSE, "col 1,col 2,col 3,col 4 
txt 1,txt ' 2,\"This is a big 

field with carriage returns, all enclosed in double 

quotes\",txt 4 
txt1,txt2,txt3,txt4") 

geben
col 1 col 2                       col 3 col 4 
1 txt 1 txt ' 2 This is a big\n \n field with carriage returns, all enclosed in double\n \n quotes txt 4 
2 txt1 txt2                       txt3 txt4 

ich es vermuten kann mit geeigneten args read.table weitergegeben erfolgen, aber es ist wahrscheinlich nicht die Mühe wert, vorausgesetzt, Sie können data.table oder ein anderes Paket installieren, das dies besser behandelt.

+6

Nach rund 20 Antworten in mehreren Threads gehen über, habe ich gelernt, dass fread genial –

5

Ich kann es auf diesem Spielzeug Beispiel tun, aber ich bin überhaupt nicht zuversichtlich, das ist der richtige Weg zu gehen. Meine Erfahrung mit realen CSV-Dateien ist, dass es oft andere Pannen gibt, die solche Bemühungen zunichte machen.

xs <- scan(what="", sep=",", quote="\"") 
# then paste in your text: 

1: col 1,col 2,col 3,col 4 
5: txt 1,txt ' 2,"This is a big 
5: 
5: field with carriage returns, all enclosed in double 
5: 
5: quotes",txt 4 
9: txt1,txt2,txt3,txt4 
13: 
Read 12 items 

(Upvote Franks data.table Erfolg.)

Da read.table ist wirklich ein Wrapper um die scan Funktion, die ich mit diesen Einstellungen experimentiert und verstanden schließlich, dass ich auf das Innere Apostroph entkommen müssten die zweite Zeile:

read.table(text='col 1,col 2,col 3,col 4 
txt 1,txt \' 2,"This is a big 

field with carriage returns, all enclosed in double 

quotes",txt 4 
txt1,txt2,txt3,txt4 
', header=TRUE, sep=",", quote="\"")