我正在尝试使用fread
包中的data.table
命令读取CSV文件,但我遇到了"嵌入式字符串"错误。
我在Linux操作系统(Antergos)中,所以也欢迎任何解决此问题的shell脚本。
我正在尝试阅读的CSV文件位于我的Dropbox through this link(30MB压缩文件)中。
可重复的例子很简单:
fread("20170630_Remuneracao.csv", encoding = 'Latin-1', dec = ',')
Error in fread("r.csv", encoding = "Latin-1", dec = ",") :
embedded nul in string: '\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\000'
尝试了方法:
sed 's/\\0//g' 20170630_Remuneracao.csv > 20170630_Remuneracao.csv
为as suggested here。
当我再次读取文件时,它会给出与以前相同的错误。
file <- "file.csv"
tt <- tempfile() # or tempfile(tmpdir="/dev/shm")
system(paste0("tr < ", file, " -d '\\000' >", tt))
fread(tt)
来自this answer。
上面的代码解决了空字符串错误,但引入了新错误
Expected sep (' ') but new line or EOF ends field 28 on line 28333 when reading data
有什么建议吗? 谢谢!
修改
阅读this answer后,我怀疑我可能会遇到同样的问题。所以我用LibreOffice Calc打开文件并用适当的CSV格式再次保存。通过这种方式可行,但由于它不是一个合适的解决方案,我会将这个问题保持开放,希望能够以编程方式完成解决方案。