2015-12-31 7 views
6

Es sieht so aus, als ob die zweite Zeile in der Datei leer ist, die Spaltennamen werden nicht gelesen. Ich habe mit Switches wie Header, Skip, aus der Dokumentation gespielt, kann es aber nicht zum Laufen bringen.data.table fread, wie leere Zeile ignoriert wird

Falls die zweite Zeile in meiner Datei leer ist, wie ignoriert man diese Tatsache und liest immer noch die erste Zeile als Spaltennamen?

die zweite Zeile leer ist:

> fread('c1 c2\n\n1 2\n3 4\n') 

    V1 V2 
1: 1 2 
2: 3 4 

die zweite Zeile nicht leer ist:

> fread('c1 c2\n1 2\n3 4\n') 
    c1 c2 
1: 1 2 
2: 3 4 
+0

@VasilyA Ihre Frage wieder öffnen, aber das bedeutet nicht, dass dies eine clear duplizieren imo, weil die Antwort, die Sie angenommen haben, jünger ist als die Antworten unter – Jaap

+1

@VasilyA Wenn Sie auf die eine oder andere Weise einverstanden sind, sollte es geschlossen werden, besser, es in Ruhe zu lassen. Zu viele Betrüger auf SO gehen als solche unmarkiert, und es ist besser, sie irgendwie zu verknüpfen als gar nicht ... wie in diesem Fall zwei Jahre lang. Indem du den Leuten folgst, die Dupes schließen, hemmst du die Herstellung solcher Links weiter. Überlegenswert, jedenfalls. – Frank

+0

Ich stimme absolut zu, dass das Markieren von Dupes notwendig und nützliche Arbeit ist, wollte es nicht abschrecken, sorry, wenn es so aussah. Ich bin einfach kein Experte für SO Regeln und Traditionen, deshalb habe ich gefragt, was die Logik ist, eines der beiden zu wählen. Vielen Dank für Ihre Zeit und Entschuldigung für unnötige Überschwemmungen. –

Antwort

2

Eine Abhilfe: Lesen Sie die Datei mit fread dann ein anderes Werkzeug verwenden nur die erste Zeile zu lesen korrekt, um es als Spaltennamen hinzuzufügen.

library(data.table) 
library(readr) 

str_data <- 'c1 c2\n\n1 2\n3 4\n' 
dt <- fread(str_data) 

df.header <- read_delim(str_data, delim = " ", n_max = 0) 
setnames(dt, names(df.header)) 

> dt 
    c1 c2 
1: 1 2 
2: 3 4 
+2

@Jim Green Bitte denken Sie darüber nach, eine der Antworten zu akzeptieren, wenn sie Ihr Problem gelöst haben. – paljenczy

5

Die aktuelle Version von data.table (1.9.8+) fügt ein blank.lines.skip Argument, um dieses Problem zu lösen scheint:

fread('c1 c2\n\n1 2\n3 4\n',blank.lines.skip = TRUE) 
# c1 c2 
# 1: 1 2 
# 2: 3 4