Gibt es eine Möglichkeit für fread
das Verhalten von read.table
zu imitieren, wobei die class
der Variablen durch die Daten festgelegt wird, eingelesen.Verhindern column-Klasse-Inferenz in fread()
ich mit einem numerischen Daten einige Kommentare unter den Hauptdaten. Wenn ich fread
verwende, um die Daten einzulesen, werden die Spalten in Zeichen konvertiert. Durch Setzen der nrow
in read.table` kann ich dieses Verhalten jedoch stoppen. Ist das in fread möglich? (Ich würde es vorziehen, die Rohdaten nicht zu ändern oder eine korrigierte Kopie anzufertigen). Dank
Ein Beispiel
d <- data.frame(x=c(1:100, NA, NA, "fff"), y=c(1:100, NA,NA,NA))
write.csv(d, "test.csv", row.names=F)
in_d <- read.csv("test.csv", nrow=100, header=T)
in_dt <- data.table::fread("test.csv", nrow=100)
Welche
> str(in_d)
'data.frame': 100 obs. of 2 variables:
$ x: int 1 2 3 4 5 6 7 8 9 10 ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
> str(in_dt)
Classes ‘data.table’ and 'data.frame': 100 obs. of 2 variables:
$ x: chr "1" "2" "3" "4" ...
$ y: int 1 2 3 4 5 6 7 8 9 10 ...
- attr(*, ".internal.selfref")=<externalptr>
Als Abhilfe, die ich dachte, erzeugt würde ich in der Lage sein read.table
zu verwenden, in einer Zeile zu lesen, die Klasse erhalten und die colClasses
gesetzt, aber Ich verstehe das nicht.
cl <- read.csv("test.csv", nrow=1, header=T)
cols <- unname(sapply(cl, class))
in_dt <- data.table::fread("test.csv", nrow=100, colClasses=cols)
str(in_dt)
Verwendung Windows8.1 R Version 3.1.2 (2014.10.31) Plattform: x86_64-W64-mingw32/x64 (64-Bit)
Laut einem vernünftigen Plan, aber ich lese eigentlich die Hilfe-Seite: "Fread wird nur eine Spalte auf einen höheren Typ hochstufen, wenn colClasses es anfordert. Es wird keine Spalte auf einen niedrigeren Typ herabstufen, da sich NAs ergeben würden Solche Spalten müssen Sie anschließend selbst erzwingen, wenn Sie wirklich Datenverlust benötigen. " Es scheint, dass selbst das Beschränken des Lesens auf 5 Zeilen fehlschlägt. Ich denke, ich erinnere mich, dass der ColClasses-Mechanismus eine ziemlich neue Ergänzung war, also sollten Sie vielleicht eine Feature-Anfrage einreichen. Matthew und Arun sind oft sehr zuvorkommend. –
Sicher muss es eine DT-Strategie geben, um alle Spalten zu numerisch zu zwingen? Setzen Sie '.SDcols' auf einen geeigneten Vektor und etwas in der Art:' DT [, .SD: = lapply (.SDcols, as.numeric), .SDcols = vec] '. Ich bin kein DT-Benutzer, aber ich bin mir sicher, dass es einen minimalen Tipp-Ansatz gibt und ich vermute, dass Sie ihn in SO-Antworten finden. –
@BondedDust; Ich bin auch kein DT-Benutzer, seine nur lesen.tabelle hat (ernsthafter) Probleme mit meinen Daten als fread ist. Ich werde auf SO schauen. danke – user2957945