R data.table fwrite to fread delimitatore di spazio e svuota
Ho problemi a usare fread con "" come delimitatore e valori vuoti intervallati. Ad esempio, questo:
dt <- data.table(1:5,1:5,1:5) #make a simple table
dt[3,"V2" := NA] #add a blank in the middle to illustrate the problem
fwrite(dt, file = "dt.csv", sep = " ") #save to file
dt <- fread("dt.csv", sep = " ") #try to retrieve
Il fread fallisce con: "Fermato in anticipo sulla riga 4. Previsti 3 campi ma trovati 2." Il problema sembra essere che con il valore NA nella colonna centrale, fwrite fornisce valore | spazio | spazio | valore, quindi fread non riconosce il valore vuoto implicito nel mezzo.
Capisco che sarebbe semplice utilizzare un altro delimitatore in primo luogo. Tuttavia, è possibile ottenere fread per riprodurre l'originale dt qui?
MODIFICA CON UNA SOLUZIONE LATO LETTURA :
Ho trovato la stessa domanda qui . È un po 'confuso perché fornisce una soluzione, ma in seguito la soluzione ha smesso di funzionare. Perseguendo altri percorsi, il più vicino che ho trovato ora a una soluzione sul lato di lettura con fread () è con un comando Unix come questo:
dt <- fread(cmd="wsl sed -r 's/ /,/g' dt.csv") #converts spaces to commas on the way in
Su Windows 10 ho dovuto fare alcuni tentativi ed errori per far sì che il mio sistema eseguisse i comandi Unix. La parte "wsl" sembra dipendere dal sistema. Questo video è stato utile e ho usato il primo metodo che descrive lì. Questa e questa domanda forniscono un po 'di più su sed con fread. Quest'ultimo dice che sed viene fornito con rTools, anche se non l'ho provato.
Risposte
Forse esportare NA
come qualcosa di diverso ""
da quello predefinito
Qui io uso @
library(data.table)
dt <- data.table(1:5,1:5,1:5) #make a simple table
dt[3,"V2" := NA] #add a blank in the middle to illustrate the problem
fwrite(dt, file = "dt.csv", sep = " ", na="@") #save to file
dt <- fread("dt.csv", sep = " ",na.strings = "@") #try to retrieve