2015-12-31 15 views
6

Sembra che la seconda riga nel file sia vuota, i nomi delle colonne non verranno letti. Ho giocato con switch come header, skip, dalla documentazione ma non riesco a farlo funzionare.data.table fread come ignorare la linea vuota

Nel caso in cui la seconda riga nel mio file sia vuota, come ignorare questo fatto e leggere ancora la prima riga come nomi di colonne?

seconda riga è vuota:

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

    V1 V2 
1: 1 2 
2: 3 4 

seconda riga non è vuota:

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

@VasilyA riaprirà tua domanda, ma che non si tratta di una cancella il duplicato perché la risposta che hai accettato è più giovane delle risposte di seguito – Jaap

+1

@VasilyA Se in un modo o nell'altro sei d'accordo dovrebbe essere chiuso, meglio lasciarlo solo. Troppi imbroglioni su SO non sono contrassegnati come tali ed è meglio collegarli in qualche modo che non del tutto ... come accaduto per due anni in questo caso. Attaccando le persone che chiudono i duplicati, stai ulteriormente disincentivando la creazione di tali collegamenti. Vale la pena considerare, comunque. – Frank

+0

Sono assolutamente d'accordo sul fatto che la marcatura dei duplicati sia necessaria e utile, non volevo disincentivare, scusa se sembrava così. Non sono un esperto di regole e tradizioni SO, per questo ho chiesto qual è la logica per scegliere uno dei due. Grazie per il tuo tempo e scusa per aver fatto un'inondazione inutile. –

risposta

2

Una soluzione: leggere il file con fread quindi utilizzare un altro strumento per leggere solo la prima riga correttamente per aggiungerlo come nomi di colonne.

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, ti preghiamo di considerare di accettare una delle risposte se hanno risolto il tuo problema. – paljenczy

5

La versione corrente di data.table (1.9.8+) aggiunge un argomento blank.lines.skip che sembra risolvere il problema:

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