2015-12-31 9 views
6

Wygląda na to, że jeśli druga linia w pliku jest pusta, nazwy kolumn nie będą czytane. Grałem przy pomocy przełączników, takich jak nagłówek, pominięcie, z dokumentacji, ale nie mogę go uruchomić.data.table fread jak zignorować pustą linię

Jeśli drugi wiersz w moim pliku jest pusty, jak zignorować ten fakt i nadal czytać pierwszy wiersz jako nazwy kolumn?

druga linia jest pusta:

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

    V1 V2 
1: 1 2 
2: 3 4 

druga linia nie jest pusty:

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

@VasilyA ponownie otworzy swoje pytanie, ale to nie jest to usuń duplikat imo, ponieważ zaakceptowana odpowiedź jest młodsza niż odpowiedzi poniżej: – Jaap

+1

@ VasilyA Jeśli tak czy inaczej, zgadzasz się, powinna być zamknięta, lepiej zostawić ją w spokoju. Zbyt wiele dupek na SO jest nieoznaczonych jako takie i lepiej jest je połączyć jakoś inaczej niż w ogóle ... tak jak to miało miejsce przez dwa lata w tym przypadku. Przechodząc po tym, jak ludzie zamykają dupe, dodatkowo zniechęcasz do tworzenia takich linków. W każdym razie warto się zastanowić. – Frank

+0

Całkowicie zgadzam się, że oznaczanie duplikatów jest konieczną i pożyteczną pracą, nie chciałem tego zniechęcić, przepraszam, jeśli tak wyglądało. Po prostu nie jestem ekspertem od zasad i tradycji związanych z SO, dlatego zapytałem, jaka jest logika wyboru jednego z nich. Dziękuję za poświęcony czas i przepraszam za niepotrzebną powódź. –

Odpowiedz

2

Obejście: odczytać pliku z fread następnie użyć innego narzędzia do odczytu tylko pierwszy wiersz poprawnie, aby dodać go jako nazwy kolumn.

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, rozważ zaakceptowanie jednej z odpowiedzi, jeśli rozwiązały Twój problem. – paljenczy

5

Aktualna wersja data.table (1.9.8+) dodaje blank.lines.skip argumentu, który wydaje się rozwiązać ten problem:

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