2014-02-07 18 views
14

Ich habe eine Textdatei mit Byte Order Mark (U + FEFF) am Anfang. Ich versuche, die Datei in R zu lesen. Ist es möglich, die Byte-Bestellmarke zu vermeiden?Lesen einer UTF-8-Textdatei mit BOM

Die Funktion fread (aus dem Paket data.table) liest die Datei, fügt aber ļ»æ am Anfang des ersten Variablenname:

> names(frame_pers)[1] 
[1] "ļ»æreg_date" 

Das gleiche mit read.csv Funktion ist.

Derzeit habe ich eine Funktion gemacht, die die Stückliste aus dem ersten Spaltennamen entfernt, aber ich glaube, es sollte eine Möglichkeit geben, wie die Stückliste automatisch entfernt wird.

remove.BOM <- function(x) setnames(x, 1, substring(names(x)[1], 4)) 

> names(frame_pers)[1] 
[1] "ļ»æreg_date" 
> remove.BOM(frame_pers) 
> names(frame_pers)[1] 
[1] "reg_date" 

Ich bin die native Codierung für die R-Sitzung mit:

> options("encoding" = "") 
> options("encoding") 
$encoding 
[1] "" 

Antwort

22

Haben Sie read.csv(..., fileEncoding = "UTF-8-BOM") versucht?. ?file sagt:

Wie aus R die Codierung ‚‚UTF-8-BOM‘‘ 3.0.0 akzeptiert und wird ein Byte Order Mark, falls vorhanden entfernen (die es oft für Dateien und Web-Seiten ist erzeugt durch Microsoft-Anwendungen).

+0

auch nicht für mich arbeiten. Meine Rohdaten sehen aus wie "31.1" beim Kopieren-Einfügen von Notepad ++, aber in R mit Fread teilt es sich in 2 Spalten, und mit read.csv bekomme ich als Präfix "ï» ¿"(mit as.is = TRUE). Ich benutzte autohotkey und convert2txt, um ocr von einer GUI-Anzeige zu erhalten, und ich schrieb es in die Datei. Das gibt mir das Problem, dass "31.2" zu "ï" .331 " – EngrStudent

4

Dies wurde zwischen den Versionen 1.9.6 und 1.9.8 mit this commit gehandhabt; Aktualisieren Sie Ihre data.table Installation, um dies zu beheben.

Ist das erledigt, die Sie gerade fread verwenden können:

fread("file_name.csv") 
+0

nicht für mich funktioniert. Meine Daten haben das Präfix " – EngrStudent

+0

@EngrStudent, was ist Ihre Daten? Tabelle Version – MichaelChirico

+0

Ich benutze 1.10.4. Ich endete mit "read_csv" und Einstellung "col_types =" c "", dann trimmen das erste Zeichen vor der Konvertierung in numerische. Es war ein Klotz. – EngrStudent