Error ‘nul incrustado en cadena’ al importar csv con fread

Tengo un archivo grande (3.5G) que bash importar usando data.table::fread .

Originalmente se creó a partir de un archivo rpt que se abrió como texto y se guardó como un archivo CSV.

Esto ha funcionado bien con archivos más pequeños (del mismo tipo de datos, las mismas columnas y todo. Este es solo para un marco de tiempo más largo y un scope más amplio).

Cuando bash y corro

 mydata <- fread("mycsv.csv") 

Me sale el error:

Error en fread (“mycsv.csv”): nul incrustado en la cadena: ‘y \ 0e \ 0a \ 0r \ 0’

¿Qué significa esto?

Podemos eliminar los terminadores nulos en la línea de comandos usando algo como:

 sed 's/\\0//g' mycsv.csv > mycsv.csv 

O como sugiere @marbel, fread le permite pasar la llamada sed dentro del texto. Como:

 fread("sed 's/\\0//g' mycsv.csv") 

En este caso, puede usar read.csv con fileEncoding de UTF-16LE en lugar de fread .

 read.csv("mycsv.csv",fileEncoding="UTF-16LE") 

Teniendo en cuenta su tamaño de datos, usar read.csv tomaría un par de minutos, pero creo que no es gran cosa.

Puedes probar esta pequeña función:

 cleanFiles<-function(file,newfile){ writeLines(iconv(readLines(file,skipNul = TRUE)),newfile) } 

Es trabajo para mi

Una forma no técnica de resolver esto sería, para

  1. Abra la problemática .csv

  2. Ctrl + A (Seleccionar todo)

  3. Abra una nueva hoja de Excel

  4. Haga clic derecho y elija ‘Pegar como valores’

  5. Guarde y use este archivo en lugar del original.

Trabajó para mí, y no toma mucho tiempo.