'嵌入nul in string'与fread(试过所有其他方法仍然无法解决)

时间:2015-12-22 03:23:23

标签: r vim sed data.table fread

我使用Mac与RStudio 0.99.489和R3.2.2。我有一个1GB的csv文件,它不是很大但如果我尝试用read.csv导入它仍然需要大约5分钟,而且我有很多这样大小的文件所以我试过fread() 。通过阅读之前的问题,我了解到这个错误可能是因为日期中缺少值(正常条目类似于日期列的03月03日:15:31:50'但是,错误的地方发生,它看起来像是05年5月。

我在'Embedded nul in string' error when importing csv with fread中提到了sed 's/\\0//g' mycsv1.csv > mycsv2.csv,但仍会弹出相同的错误消息。

sed -i 's/\\0//g' /src/path/mycsv.csv根本不适合我,终端报告此命令行的错误(我对这些命令行不太熟悉,所以我不理解逻辑在那些背后)

我试过

file <- "file.csv"
tt <- tempfile()  # or tempfile(tmpdir="/dev/shm")
system(paste0("tr < ", file, " -d '\\000' >", tt))
fread(tt)

来自'Embedded nul in string' when importing large CSV (8 GB) with fread(),我猜它删除了缺少值的条目,因为当我运行时fread(tt) R说

Error in fread(tt) : 
  Expecting 5 cols, but line 5060627 contains text after processing all cols. It is very likely that this is due to one or more fields having embedded sep=',' and/or (unescaped) '\n' characters within unbalanced unescaped quotes.

之后,我尝试了iconv -f utf-16 -t utf-8 myfile1.csv > myfile2.csv,因为这似乎是由fread无法理解utf-16的某些问题引起的,并且此命令行可能有问题,但它只是给我一张带有随机符号的电子表格。

我看到了这个

vim filename.csv

:%s/CTRL+2//g

ESC  #TO SWITCH FROM INSERT MODE

:wq   # TO SAVE THE FILE

来自Error with fread in R--embedded nul in string: '\0',但在我输入vim filename.csv后,终端只读了整个电子表格而我无法输入第二个命令(:%s/CTRL+2//g),我不太了解这些命令行,所以也许我需要对我的情况做一些调整。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

sed -i 's/\x0//g' my_file

cat my_file|tr -d '\000' > new_file