使用fread时字符串中嵌入了空字符(embedded nul in string),尝试了所有其他方法仍无法解决。

4

我正在使用RStudio 0.99.489和R3.2.2的Mac。我有一个1GB的csv文件,虽然不是特别大,但如果我尝试使用read.csv导入它仍需要大约5分钟并且我有很多这个大小的文件,所以我尝试了fread()方法。从之前的问题中得知,这个错误可能是由于日期中缺少值造成的(日期列的正常条目看起来像'03May1995:15:31:50',然而,在错误发生的地方,它看起来像'05May')。

'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)

使用fread()导入8GB的CSV文件时出现"字符串中的嵌入零"的问题,我猜测它删除了存在缺失值的条目,因为当我运行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个回答

3

尝试

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

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

对于 sed -i 's/\x0//g' my_file,终端返回:sed: 1: "my_file.csv": invalid command code C。对于第二个命令,终端返回“usage: tr [-Ccsu] string1 string2 tr [-Ccu] -d string1 tr [-Ccu] -s string1 tr [-Ccu] -ds string1 string2”,并且仍然显示“embedded nul in string”的错误消息。 - ttothef
这是一个CSV文件,我正在使用Mac,并尝试在终端中操作。 - ttothef
请将“my_file”替换为您的文件路径。 - repzero
哦!我已经在存储数据的目录中了,我还需要输入路径吗? - ttothef
我不知道文件是否在子目录中,你可以做的是将文件从显示窗口拖到应该放置的shell中。 - repzero
我尝试过了,还是不行... 对于“cat my_file|tr -d '\000' > new_file”,当我使用fread()时,R会给我一个错误消息,“期望5列,但第5060627行在处理所有列后包含文本。” 我不确定该怎么办... - ttothef

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接