R data.table fwrite para delimitador de espaço de fread e vazios
Estou tendo problemas ao usar fread com "" como delimitador e valores em branco intercalados. Por exemplo, este:
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
O fread falha com: "Parado no início da linha 4. Esperados 3 campos, mas encontrados 2." O problema parece ser que, com o valor NA na coluna do meio, fwrite fornece valor | espaço | espaço | valor, então fread não reconhece o valor em branco implícito no meio.
Eu entendo que seria simples usar outro delimitador em primeiro lugar. No entanto, é possível fazer com que o fread reproduza o dt original aqui?
EDITAR COM UMA SOLUÇÃO DE LEITURA :
Eu encontrei a mesma pergunta aqui . É um pouco confuso porque dá uma solução, mas depois a solução parou de funcionar. Ao buscar outras pistas, o mais próximo que encontrei agora de uma solução de leitura com fread () é com um comando Unix como este:
dt <- fread(cmd="wsl sed -r 's/ /,/g' dt.csv") #converts spaces to commas on the way in
No Windows 10, tive que fazer algumas tentativas e erros para fazer meu sistema rodar comandos Unix. A parte "wsl" parece depender do sistema. Este vídeo foi útil e usei o primeiro método que ele descreve lá. Esta e esta questão fornecem um pouco mais sobre sed com fread. Este último diz que o sed vem com rTools, embora eu não tenha tentado isso.
Respostas
Talvez exportar NA
como algo diferente do ""
padrão
Aqui eu 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