Wie lese ich eine Textdatei in GNU R mit einem Multi-Byte-Separator?

8

Ich kann read.csv oder read.csv2 verwenden, um Daten in R zu lesen. Aber das Problem, auf das ich gestoßen bin, ist, dass mein Trennzeichen eine Mehrfach-Byte-Zeichenkette anstelle eines einzelnen Zeichens ist. Wie kann ich damit umgehen?

    
RobinMin 25.10.2011, 01:51
quelle

2 Antworten

9

Die Bereitstellung von Beispieldaten würde helfen. Sie können jedoch möglicherweise Folgendes an Ihre Anforderungen anpassen.

Ich habe eine Beispieldatendatei erstellt, bei der es sich lediglich um eine Textdatei handelt, die Folgendes enthält:

%Vor%

Ich habe es als "test.csv" gespeichert. Das Trennzeichen ist die Zeichenfolge 'sep'. Ich denke, read.csv() verwendet scan() , das nur ein einzelnes Zeichen für sep akzeptiert. Um dies zu umgehen, beachten Sie Folgendes:

%Vor%

readLines() liest nur die Zeilen ein. gsub ersetzt die aus mehreren Zeichen bestehende Trennzeichenfolge für ein einzelnes ' ' oder was auch immer für Ihre Daten geeignet ist. Dann liest textConnection() und read.data() alles bequem wieder ein. Für kleinere Datensätze sollte dies in Ordnung sein. Wenn Sie sehr große Datenmengen haben, sollten Sie eine Vorverarbeitung mit etwas wie AWK in Betracht ziehen, um die mehrteilige Trennzeichenfolge zu ersetzen. Das obige ist von Ссылка .

Aktualisieren Wenn Sie in Ihren Daten Leerzeichen haben, verwenden Sie ein anderes Ersatztrennzeichen. Überlegen Sie, test.csv zu ändern:

%Vor%

Dann mit der folgenden Funktion:

%Vor%

Versuchen:

%Vor%

Hier ersetzen Sie das ursprüngliche Trennzeichen durch Tabulatoren ( \t ). Das as.is wird an read.table() übergeben, um zu verhindern, dass Strings eingelesen werden, ist Faktoren, aber das ist Ihr Aufruf. Wenn Sie in Ihren Daten einen komplizierteren Leerraum haben, können Sie das Argument quote in read.table() hilfreich finden oder mit AWK, Perl usw. vorverarbeiten.

Ähnliches gilt für strsplit() von crippledlambda und ist wahrscheinlich für Daten mittlerer Größe gleichwertig. Wenn die Leistung zum Problem wird, versuchen Sie beides und sehen Sie, was für Sie funktioniert.

    
jthetzel 25.10.2011, 02:23
quelle
3

In diesem Fall können Sie textConnection(txt) durch Ihren Dateinamen ersetzen, aber im Wesentlichen können Sie einen Code oder eine Funktion um strsplit erstellen. Hier nehme ich an, dass Sie eine Kopfzeile haben, aber Sie können natürlich ein header -Argument definieren und die Erstellung Ihres Datenrahmens basierend auf der folgenden Funktion verallgemeinern:

%Vor%     
hatmatrix 25.10.2011 10:01
quelle

Tags und Links